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

📄 env_nt.c

📁 mgcp协议源代码。支持多种编码:g711
💻 C
📖 第 1 页 / 共 2 页
字号:
				/* success if no longer NLI */      if (!server_nli) return env_init (user,NIL);    }  }  s = (logtry-- > 0) ? "Login failure" : "Excessive login attempts";				/* note the failure in the syslog */  syslog (LOG_INFO,"%s user=%.80s host=%.80s",s,user,tcp_clienthost ());  sleep (3);			/* slow down possible cracker */  return NIL;}/* Authenticated server log in * Accepts: user name string *	    authentication user name string *	    argument count *	    argument vector * Returns: T if password validated, NIL otherwise */long authserver_login (char *user,char *authuser,int argc,char *argv[]){  return server_login (user,NIL,authuser,argc,argv);}/* Log in as anonymous daemon * Accepts: argument count *	    argument vector * Returns: T if successful, NIL if error */long anonymous_login (int argc,char *argv[]){  return server_login ("Guest",NIL,NIL,argc,argv);}/* Initialize environment * Accepts: user name *          home directory, or NIL to use default * Returns: T, always */long env_init (char *user,char *home){  if (myUserName) fatal ("env_init called twice!");  myUserName = cpystr (user);	/* remember user name */  if (!myHomeDir)		/* only if home directory not set up yet */    myHomeDir = (home && *home) ? cpystr (home) : win_homedir (user);  return T;}/* Check if NT * Returns: T if NT, NIL if Win9x */int check_nt (void){  if (is_nt < 0) {		/* not yet set up? */    OSVERSIONINFO ver;    ver.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);    GetVersionEx (&ver);    is_nt = (ver.dwPlatformId == VER_PLATFORM_WIN32_NT) ? T : NIL;  }  return is_nt;}/* Return Windows home directory * Accepts: user name * Returns: home directory */char *win_homedir (char *user){  char *s,*t,tmp[MAILTMPLEN];  PUSER_INFO_1 ui;				/* Win9x default */  if (!check_nt ()) sprintf (tmp,"%s\\My Documents",defaultDrive ());				/* get from user info on NT */  else if ((netapi || (netapi = LoadLibrary ("netapi32.dll"))) &&	   (getinfo ||	    (getinfo = (GETINFO) GetProcAddress (netapi,"NetUserGetInfo"))) &&	   MultiByteToWideChar (CP_ACP,0,user,strlen (user) + 1,				(WCHAR *) tmp,MAILTMPLEN) &&	   !(*getinfo) (NIL,(LPWSTR) &tmp,1,(LPBYTE *) &ui) &&	   WideCharToMultiByte (CP_ACP,0,ui->usri1_home_dir,-1,				tmp,MAILTMPLEN,NIL,NIL) && tmp[0]) {				/* make sure doesn't end with delimiter */    if ((*(s = tmp + strlen (tmp) - 1) == '\\') || (*s == '/')) *s = '\0';  }				/* no home dir, found Win2K user profile? */  else if ((s = getenv ("USERPROFILE")) && (t = strrchr (s,'\\'))) {          strncpy (tmp,s,t-s);	/* copy up to user name */    sprintf (tmp+(t-s),"\\%.100s\\My Documents",user);  }				/* last resort NT default */  else sprintf (tmp,"%s\\users\\default",defaultDrive ());  return cpystr (tmp);}/* Return default drive * Returns: default drive */static char *defaultDrive (void){  char *s = getenv ("SystemDrive");  return (s && *s) ? s : "C:";}/* Return my user name * Accepts: pointer to optional flags * Returns: my user name */char *myusername_full (unsigned long *flags){  UCHAR usr[MAILTMPLEN];  DWORD len = MAILTMPLEN;  char *user,*path,*d,*p,pth[MAILTMPLEN];  char *ret = "SYSTEM";				/* get user name if don't have it yet */  if (!myUserName && !server_nli &&				/* use callback, else logon name */      ((mailusername && (user = (char *) (*mailusername) ())) ||       (GetUserName (usr,&len) && _stricmp (user = (char *) usr,"SYSTEM")))) {				/* try HOMEPATH, then HOME */    if (p = getenv ("HOMEPATH"))      sprintf (path = pth,"%s%s",	       (d = getenv ("HOMEDRIVE")) ? d : defaultDrive (),p);    else if (!(path = getenv ("HOME")))      sprintf (path = pth,"%s\\My Documents",defaultDrive ());				/* make sure doesn't end with delimiter */    if ((*(p = path + strlen (path) -1) == '\\') || (*p == '/')) *p = '\0';    env_init (user,path);	/* initialize environment */  }  if (myUserName) {		/* logged in? */    if (flags)			/* Guest is an anonymous user */      *flags = _stricmp (myUserName,"Guest") ? MU_LOGGEDIN : MU_ANONYMOUS;    ret = myUserName;		/* return user name */  }  else if (flags) *flags = MU_NOTLOGGEDIN;  return ret;}/* Return my home directory name * Returns: my home directory name */char *myhomedir (){  if (!myHomeDir) myusername ();/* initialize if first time */  return myHomeDir ? myHomeDir : "";}/* Return system standard INBOX * Accepts: buffer string */char *sysinbox (){  char tmp[MAILTMPLEN];  if (!sysInbox) {		/* initialize if first time */    if (check_nt ()) sprintf (tmp,MAILFILE,myUserName);    else sprintf (tmp,"%s\\INBOX",myhomedir ());    sysInbox = cpystr (tmp);	/* system inbox is from mail spool */  }  return sysInbox;}/* Return mailbox directory name * Accepts: destination buffer *	    directory prefix *	    name in directory * Returns: file name or NIL if error */char *mailboxdir (char *dst,char *dir,char *name){  char tmp[MAILTMPLEN];  if (dir || name) {		/* if either argument provided */    if (dir) {      if (strlen (dir) > NETMAXMBX) return NIL;      strcpy (tmp,dir);		/* write directory prefix */    }    else tmp[0] = '\0';		/* otherwise null string */    if (name) {      if (strlen (name) > NETMAXMBX) return NIL;      strcat (tmp,name);	/* write name in directory */    }				/* validate name, return its name */    if (!mailboxfile (dst,tmp)) return NIL;  }  else strcpy (dst,myhomedir());/* no arguments, wants home directory */  return dst;			/* return the name */}/* Return mailbox file name * Accepts: destination buffer *	    mailbox name * Returns: file name or empty string for driver-selected INBOX or NIL if error */char *mailboxfile (char *dst,char *name){  char *dir = myhomedir ();  *dst = '\0';			/* default to empty string */				/* check for INBOX */  if (((name[0] == 'I') || (name[0] == 'i')) &&      ((name[1] == 'N') || (name[1] == 'n')) &&      ((name[2] == 'B') || (name[2] == 'b')) &&      ((name[3] == 'O') || (name[3] == 'o')) &&      ((name[4] == 'X') || (name[4] == 'x')) && !name[5]) return dst;				/* reject names with / */  if (strchr (name,'/')) return NIL;  else if (*name == '#') {	/* namespace names */    if (((name[1] == 'u') || (name[1] == 'U')) &&	((name[2] == 's') || (name[2] == 'S')) &&	((name[3] == 'e') || (name[3] == 'E')) &&	((name[4] == 'r') || (name[4] == 'R')) && (name[5] == '.')) {				/* copy user name */      for (dir = dst,name += 6; *name && (*name != '\\'); *dir++ = *name++);      *dir++ = '\0';		/* tie off user name */      if (!(dir = win_homedir (dst))) return NIL;				/* build resulting name */      sprintf (dst,"%s\\%s",dir,name);      fs_give ((void **) &dir);	/* clean up other user's home dir */      return dst;    }    else return NIL;		/* unknown namespace name */  }				/* absolute path name? */  else if ((*name == '\\') || (name[1] == ':')) return strcpy (dst,name);				/* build resulting name */  sprintf (dst,"%s\\%s",dir,name);  return dst;			/* return it */}/* Lock file name * Accepts: return buffer for file name *	    file name *	    locking to be placed on file if non-NIL * Returns: file descriptor of lock or -1 if error */int lockname (char *lock,char *fname,int op){  int ld;  char c,*s;				/* Win2K and Win98 have TEMP under windir */  if (!((s = lockdir (lock,getenv ("windir"),"TEMP")) ||				/* NT4, NT3.x and Win95 use one of these */	(s = lockdir (lock,getenv ("TEMP"),NIL)) ||	(s = lockdir (lock,getenv ("TMP"),NIL)) ||	(s = lockdir (lock,getenv ("TMPDIR"),NIL)) ||				/* try one of these */	(s = lockdir (lock,defaultDrive (),"WINNT\\TEMP")) ||	(s = lockdir (lock,defaultDrive (),"WINDOWS\\TEMP")) ||				/* C:\TEMP is last resort */	(s = lockdir (lock,defaultDrive (),"TEMP")))) {    mm_log ("Unable to find temporary directory",ERROR);    return -1;  }				/* generate file name */  while (c = *fname++) switch (c) {  case '/': case '\\': case ':':    *s++ = '!';			/* convert bad chars to ! */    break;  default:    *s++ = c;    break;  }  *s++ = c;			/* tie off name */				/* get the lock */  if (((ld = open (lock,O_BINARY|O_RDWR|O_CREAT,S_IREAD|S_IWRITE)) >= 0) && op)    flock (ld,op);		/* apply locking function */  return ld;			/* return locking file descriptor */}/* Build lock directory, check to see if it exists * Accepts: return buffer for lock directory *	    first part of possible name *	    optional second part * Returns: pointer to end of buffer if buffer has a good name, else NIL */char *lockdir (char *lock,char *first,char *last){  struct stat sbuf;  char c,*s;  if (first && *first) {	/* first part must be non-NIL */				/* copy first part */    for (s = lock; *first; c = *s++ = *first++);    if (last && *last) {	/* copy last part if specified */				/* write trailing \ in case not in first */      if (c != '\\') *s++ = '\\';      while (*last) c = *s++ = *last++;    }    if (c == '\\') --s;		/* delete trailing \ if any */    *s = '\0';			/* tie off name at this point */    return stat (lock,&sbuf) ? NIL : s;  }  return NIL;			/* failed */}/* Unlock file descriptor * Accepts: file descriptor *	    lock file name from lockfd() */void unlockfd (int fd,char *lock){  flock (fd,LOCK_UN);		/* unlock it */  close (fd);			/* close it */}/* Determine default prototype stream to user * Accepts: type (NIL for create, T for append) * Returns: default prototype stream */MAILSTREAM *default_proto (long type){  extern MAILSTREAM DEFAULTPROTO;  return &DEFAULTPROTO;		/* return default driver's prototype */}/* Default block notify routine * Accepts: reason for calling *	    data * Returns: data */void *mm_blocknotify (int reason,void *data){  void *ret = data;  switch (reason) {  case BLOCK_SENSITIVE:		/* entering sensitive code */    ret = (void *) alarm (0);    break;  case BLOCK_NONSENSITIVE:	/* exiting sensitive code */    if ((unsigned int) data) alarm ((unsigned int) data);    break;  default:			/* ignore all other reasons */    break;  }  return ret;}

⌨️ 快捷键说明

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