⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smb_auth.c

📁 -
💻 C
字号:
/* *  smb_auth - SMB proxy authentication module *  Copyright (C) 1998  Richard Huveneers <richard@hekkihek.hacom.nl> * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include <stdio.h>#include <stdlib.h>#include <string.h>#define BUFSIZE			256#define NMB_UNICAST		1#define NMB_BROADCAST	2struct SMBDOMAIN{	char				*name;		/* domain name */	char				*sname;		/* match this with user input */	char				*nmbaddr;	/* name service address */	int					nmbcast;	/* broadcast or unicast */	struct SMBDOMAIN	*next;		/* linked list */};struct SMBDOMAIN *firstdom = NULL;struct SMBDOMAIN *lastdom = NULL;void main(int argc, char *argv[]){	int					i;	char				buf[BUFSIZE];	struct SMBDOMAIN	*dom;	char				*s;	char				*user;	char				*pass;	char				*domname;	FILE				*p;	/* make standard output line buffered */	if (setvbuf(stdout, NULL, _IOLBF, 0) != 0)		return;	/* parse command line arguments */	for (i = 1; i < argc; i++)	{		/* the next options require an argument */		if (i + 1 == argc)			break;		if (strcmp(argv[i], "-W") == 0)		{			if ((dom = (struct SMBDOMAIN *) malloc(sizeof(struct SMBDOMAIN))) == NULL)				return;			dom->name = dom->sname = argv[++i];			dom->nmbaddr = "";			dom->nmbcast = NMB_BROADCAST;			dom->next = NULL;			/* append to linked list */			if (lastdom != NULL)				lastdom->next = dom;			else				firstdom = dom;			lastdom = dom;			continue;		}		if (strcmp(argv[i], "-w") == 0)		{			if (lastdom != NULL)				lastdom->sname = argv[++i];			continue;		}		if (strcmp(argv[i], "-B") == 0)		{			if (lastdom != NULL)			{				lastdom->nmbaddr = argv[++i];				lastdom->nmbcast = NMB_BROADCAST;			}			continue;		}		if (strcmp(argv[i], "-U") == 0)		{			if (lastdom != NULL)			{				lastdom->nmbaddr = argv[++i];				lastdom->nmbcast = NMB_UNICAST;			}			continue;		}	}	while (1)	{		if (fgets(buf, BUFSIZE, stdin) == NULL)			break;		if ((s = strchr(buf, '\n')) == NULL)			continue;		*s = '\0';		if ((s = strchr(buf, ' ')) == NULL)		{			(void) printf("ERR\n");			continue;		}		*s = '\0';		user = buf;		pass = s + 1;		domname = NULL;		if ((s = strchr(user, '\\')) != NULL)		{			*s = '\0';			domname = user;			user = s + 1;		}		/* match domname with linked list */		if (domname != NULL && strlen(domname) > 0)		{			for (dom = firstdom; dom != NULL; dom = dom->next)				if (strcasecmp(dom->sname, domname) == 0)					break;		} else			dom = firstdom;		if (dom == NULL)		{			(void) printf("ERR\n");			continue;		}		if ((p = popen(HELPERSCRIPT " > /dev/null 2>&1", "w")) == NULL)		{			(void) printf("ERR\n");			continue;		}		(void) fprintf(p, "%s\n", SAMBAPREFIX);		(void) fprintf(p, "%s\n", dom->name);		(void) fprintf(p, "%s\n", dom->nmbaddr);		(void) fprintf(p, "%d\n", dom->nmbcast);		(void) fprintf(p, "%s\n", user);		(void) fprintf(p, "%s\n", pass);		(void) fflush(p);		if (pclose(p) == 0)			(void) printf("OK\n");		else			(void) printf("ERR\n");	} /* while (1) */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -