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

📄 qmail-getpw.c

📁 linux下qmail的源码 本人加了一些注释
💻 C
字号:
#include <sys/types.h>#include <sys/stat.h>#include <pwd.h>#include "readwrite.h"#include "substdio.h"#include "subfd.h"#include "error.h"#include "exit.h"#include "byte.h"#include "str.h"#include "case.h"#include "fmt.h"#include "auto_usera.h"#include "auto_break.h"#include "qlx.h"#define GETPW_USERLEN 32char *local;struct passwd *pw;char *dash;char *extension;int userext(){  char username[GETPW_USERLEN];  struct stat st;  extension = local + str_len(local);  for (;;) {    if (extension - local < sizeof(username))      if (!*extension || (*extension == *auto_break)) {	byte_copy(username,extension - local,local);	username[extension - local] = 0;	case_lowers(username);	errno = 0;	pw = getpwnam(username);	if (errno == error_txtbsy) _exit(QLX_SYS);	if (pw)	  if (pw->pw_uid)	    if (stat(pw->pw_dir,&st) == 0) {	      if (st.st_uid == pw->pw_uid) {		dash = "";		if (*extension) { ++extension; dash = "-"; }		return 1;	      }	    }	    else	      if (error_temp(errno)) _exit(QLX_NFS);      }    if (extension == local) return 0;    --extension;  }}char num[FMT_ULONG];void main(argc,argv)int argc;char **argv;{  local = argv[1];  if (!local) _exit(100);  if (!userext()) {    extension = local;    dash = "-";    pw = getpwnam(auto_usera);  }  if (!pw) _exit(QLX_NOALIAS);  substdio_puts(subfdoutsmall,pw->pw_name);  substdio_put(subfdoutsmall,"",1);  substdio_put(subfdoutsmall,num,fmt_ulong(num,(long) pw->pw_uid));  substdio_put(subfdoutsmall,"",1);  substdio_put(subfdoutsmall,num,fmt_ulong(num,(long) pw->pw_gid));  substdio_put(subfdoutsmall,"",1);  substdio_puts(subfdoutsmall,pw->pw_dir);  substdio_put(subfdoutsmall,"",1);  substdio_puts(subfdoutsmall,dash);  substdio_put(subfdoutsmall,"",1);  substdio_puts(subfdoutsmall,extension);  substdio_put(subfdoutsmall,"",1);  substdio_flush(subfdoutsmall);  _exit(0);}

⌨️ 快捷键说明

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