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

📄 getpwnam.c

📁 wu-ftpd类unix下的ftp服务器,可用于嵌入式系统
💻 C
字号:
/* * Replacement for getpwnam - we need it to handle files other than * /etc/passwd so we can permit different passwd files for each different * host * (c) 1998-2000 by Bernhard Rosenkr鋘zer <bero@redhat.com> * 19980930	Initial version * 20000211	Various fixes */#include "config.h"#include <pwd.h>#include <sys/types.h>#include <stdio.h>#ifdef SHADOW_PASSWORD# ifdef HAVE_SHADOW_H#  include <shadow.h># endif#endif#ifndef HAVE_FGETPWENT /* Some systems (*BSD) don't have fgetpwent... */#ifdef HAVE_STRINGS_H#include <strings.h>#else#include <string.h>#endifstruct passwd *fgetpwent(FILE *stream){	char *entry=(char *) malloc(1024);	struct passwd *p=(struct passwd *) malloc(sizeof(struct passwd));	char *tmp,*tmp2;	if(!fgets(entry,1024,stream)) {		free(entry);		free(p);		return NULL;	}	tmp=strdup(entry);	if(strchr(tmp,':')) {		*strchr(tmp,':')=0;		p->pw_name=tmp;	} else {		free(tmp); free(entry);	free(p); return NULL;	}	tmp2=strchr(entry,':')+1;	tmp=strdup(tmp2);	if(strchr(tmp,':')) {		*strchr(tmp,':')=0;		p->pw_passwd=tmp;	} else {		free(tmp); free(entry); free(p->pw_name); free(p); return NULL;	}	tmp2=strchr(tmp2,':')+1;	tmp=strdup(tmp2);	if(strchr(tmp,':')) {		*strchr(tmp,':')=0;		p->pw_uid=(uid_t) atoi(tmp);	} else {		free(tmp); free(entry); free(p->pw_passwd); free(p->pw_name); free(p); return NULL;	}	free(tmp);	tmp2=strchr(tmp2,':')+1;	tmp=strdup(tmp2);	if(strchr(tmp,':')) {		*strchr(tmp,':')=0;		p->pw_gid=(gid_t) atoi(tmp);	} else {		free(tmp); free(entry); free(p->pw_passwd); free(p->pw_name); free(p); return NULL;	}	free(tmp);	tmp2=strchr(tmp2,':')+1;	tmp=strdup(tmp2);	if(strchr(tmp,':')) {		*strchr(tmp,':')=0;		p->pw_gecos=tmp;	} else {		free(tmp); free(entry); free(p->pw_passwd); free(p->pw_name); free(p); return NULL;	}	tmp2=strchr(tmp2,':')+1;	tmp=strdup(tmp2);	if(strchr(tmp,':')) {		*strchr(tmp,':')=0;		p->pw_dir=tmp;	} else {		free(tmp); free(entry); free(p->pw_gecos); free(p->pw_passwd); free(p->pw_name); free(p); return NULL;	}	tmp2=strchr(tmp2,':')+1;	if(strchr(tmp2,':')) {		free(entry); free(p->pw_dir); free(p->pw_gecos); free(p->pw_passwd); free(p->pw_name); free(p); return NULL;	}	while(strlen(tmp2) && isspace(tmp2[strlen(tmp2)-1]))		tmp2[strlen(tmp2)-1]=0;	p->pw_shell=strdup(tmp2);	free(entry);	return p;}#endifstruct passwd *bero_getpwnam(const char * name, const char * file){	FILE *f;	struct passwd *p;	struct passwd *r;		if (!strcmp(file,"/etc/passwd")) 	  return (getpwnam(name));	f=fopen(file,"r");	if(f==NULL)		return NULL;	p=NULL;	r=NULL;	while((r==NULL) && (p=fgetpwent(f)))		if(!strcasecmp(p->pw_name,name))			r=p;	fclose(f);	return r;}struct passwd *bero_getpwuid(uid_t uid, const char * file){	FILE *f;	struct passwd *p;	struct passwd *r;		if (!strcmp(file,"/etc/passwd"))	  return getpwuid(uid);	f=fopen(file,"r");	if(f==NULL)		return NULL;	p=NULL;	r=NULL;	while((r==NULL) && (p=fgetpwent(f)))		if(p->pw_uid==uid)			r=p;	fclose(f);	return r;}#ifdef SHADOW_PASSWORDstruct spwd *bero_getspnam(const char * name, const char * file){	FILE *f;	struct spwd *s;	struct spwd *r;	f=fopen(file,"r");	if(f==NULL)		return NULL;	s=NULL;	r=NULL;	while((r==NULL) && (s=fgetspent(f)))		if(!strcasecmp(s->sp_namp,name))			r=s;	fclose(f);	return r;}#endif

⌨️ 快捷键说明

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