reindent-20030715
[openafs.git] / src / rlogind / rexecd.c
index a194573..5057fb0 100644 (file)
@@ -7,7 +7,8 @@
 #include <afsconfig.h>
 #include <afs/param.h>
 
-RCSID("$Header$");
+RCSID
+    ("$Header$");
 
 #include <afs/kautils.h>       /* for UserAuthGeneral */
 #include <sys/types.h>
@@ -34,20 +35,20 @@ RCSID("$Header$");
 #include <usersec.h>
 #endif
 
-extern errno;
-struct passwd *getpwnam();
-char   *crypt(), *strncat();
+extern errno;
+struct passwd *getpwnam();
+char *crypt(), *strncat();
 #if    !defined(AFS_AIX_ENV) && !defined(AFS_HPUX_ENV) && !defined(AFS_OSF_ENV) && !defined(AFS_SUN5_ENV)
 char *sprintf();
 #endif
 /*VARARGS1*/
-int    error();
+int error();
 
 #include "AFS_component_version_number.c"
 
 #ifdef AFS_OSF_ENV
 #include <sia.h>
-SIAENTITY *entity=NULL;
+SIAENTITY *entity = NULL;
 int oargc;
 char **oargv;
 #endif
@@ -59,301 +60,312 @@ char **oargv;
  *     command\0
  *     data
  */
-/*ARGSUSED*/
+ /*ARGSUSED*/
 main(argc, argv)
-       int argc;
-       char **argv;
+     int argc;
+     char **argv;
 {
-       struct sockaddr_in from;
-       int fromlen;
+    struct sockaddr_in from;
+    int fromlen;
 
-       fromlen = sizeof (from);
-       if (getpeername(0, (struct sockaddr *)&from, &fromlen) < 0) {
-               fprintf(stderr, "%s: ", argv[0]);
-               perror("getpeername");
-               exit(1);
-       }
+    fromlen = sizeof(from);
+    if (getpeername(0, (struct sockaddr *)&from, &fromlen) < 0) {
+       fprintf(stderr, "%s: ", argv[0]);
+       perror("getpeername");
+       exit(1);
+    }
 #ifdef AFS_OSF_ENV
-       oargc = argc;
-       oargv = argv;
+    oargc = argc;
+    oargv = argv;
 #endif
-       doit(0, &from);
+    doit(0, &from);
 }
 
-char   env_user[20] = "USER=";
-char   env_home[64] = "HOME=";
-char   env_shell[64] = "SHELL=";
-char    env_logname[32] = "LOGNAME=";
-char    env_password_expires[64] = "PASSWORD_EXPIRES=";
+char env_user[20] = "USER=";
+char env_home[64] = "HOME=";
+char env_shell[64] = "SHELL=";
+char env_logname[32] = "LOGNAME=";
+char env_password_expires[64] = "PASSWORD_EXPIRES=";
 afs_int32 password_expires = -1;
 char pwd_expires_str[10];
 /* make sure env_password_expires is always the last item in envinit array */
 #if    defined(AFS_OSF_ENV) || defined(AFS_AIX_ENV)
-char   time_zone[20] = "TZ=";
-char   *envinit[] =  {env_home, env_shell, "PATH=:/usr/ucb:/bin:/usr/bin:/usr/sbin", env_user, time_zone, env_logname, env_password_expires, 0};
+char time_zone[20] = "TZ=";
+char *envinit[] =
+    { env_home, env_shell, "PATH=:/usr/ucb:/bin:/usr/bin:/usr/sbin", env_user,
+    time_zone, env_logname, env_password_expires, 0
+};
 #else
-char   *envinit[] =  {env_home, env_shell, "PATH=:/usr/ucb:/bin:/usr/bin", env_user, env_logname, env_password_expires, 0};
+char *envinit[] =
+    { env_home, env_shell, "PATH=:/usr/ucb:/bin:/usr/bin", env_user,
+    env_logname, env_password_expires, 0
+};
 #endif
 #define PATHENV ":/usr/ucb:/bin:/usr/bin:/usr/bin/X11"
-extern char    **environ;
+extern char **environ;
 
-struct sockaddr_in asin = { AF_INET };
+struct sockaddr_in asin = { AF_INET };
 
 doit(f, fromp)
-       int f;
-       struct sockaddr_in *fromp;
+     int f;
+     struct sockaddr_in *fromp;
 {
-       char cmdbuf[NCARGS+1], *cp, *namep;
-       char user[16], pass[16];
-       struct passwd *pwd;
-       char *password;
-       char **penvlist;
-       int s;
-       short port;
-       int pv[2], pid, cc;
-       fd_set ready, readfrom;
-       char buf[BUFSIZ], sig;
-       int one = 1;
-       int afsauthok = 1;
+    char cmdbuf[NCARGS + 1], *cp, *namep;
+    char user[16], pass[16];
+    struct passwd *pwd;
+    char *password;
+    char **penvlist;
+    int s;
+    short port;
+    int pv[2], pid, cc;
+    fd_set ready, readfrom;
+    char buf[BUFSIZ], sig;
+    int one = 1;
+    int afsauthok = 1;
 #ifdef AFS_SUN5_ENV
-       struct spwd *shpwd;
+    struct spwd *shpwd;
 #endif
 
-       (void) signal(SIGINT, SIG_DFL);
-       (void) signal(SIGQUIT, SIG_DFL);
-       (void) signal(SIGTERM, SIG_DFL);
+    (void)signal(SIGINT, SIG_DFL);
+    (void)signal(SIGQUIT, SIG_DFL);
+    (void)signal(SIGTERM, SIG_DFL);
 #ifdef DEBUG
-       { int t = open("/dev/tty", 2);
-         if (t >= 0) {
-               ioctl(t, TIOCNOTTY, NULL);
-               (void) close(t);
-         }
+    {
+       int t = open("/dev/tty", 2);
+       if (t >= 0) {
+           ioctl(t, TIOCNOTTY, NULL);
+           (void)close(t);
        }
+    }
 #endif
-       dup2(f, 0);
-       dup2(f, 1);
-       dup2(f, 2);
-       (void) alarm(60);
-       port = 0;
-       for (;;) {
-               char c;
-               if (read(f, &c, 1) != 1)
-                       exit(1);
-               if (c == 0)
-                       break;
-               port = port * 10 + c - '0';
-       }
-       (void) alarm(0);
-       if (port != 0) {
-               s = socket(AF_INET, SOCK_STREAM, 0);
-               if (s < 0)
-                       exit(1);
-               if (bind(s, (struct sockaddr *) &asin, sizeof (asin)) < 0)
-                       exit(1);
-               (void) alarm(60);
-               fromp->sin_port = htons((u_short)port);
-               if (connect(s, (struct sockaddr *) fromp, sizeof (*fromp)) < 0)
-                       exit(1);
-               (void) alarm(0);
-       }
-       getstr(user, sizeof(user), "username");
-       getstr(pass, sizeof(pass), "password");
-       getstr(cmdbuf, sizeof(cmdbuf), "command");
-       setpwent();
-       pwd = getpwnam(user);
+    dup2(f, 0);
+    dup2(f, 1);
+    dup2(f, 2);
+    (void)alarm(60);
+    port = 0;
+    for (;;) {
+       char c;
+       if (read(f, &c, 1) != 1)
+           exit(1);
+       if (c == 0)
+           break;
+       port = port * 10 + c - '0';
+    }
+    (void)alarm(0);
+    if (port != 0) {
+       s = socket(AF_INET, SOCK_STREAM, 0);
+       if (s < 0)
+           exit(1);
+       if (bind(s, (struct sockaddr *)&asin, sizeof(asin)) < 0)
+           exit(1);
+       (void)alarm(60);
+       fromp->sin_port = htons((u_short) port);
+       if (connect(s, (struct sockaddr *)fromp, sizeof(*fromp)) < 0)
+           exit(1);
+       (void)alarm(0);
+    }
+    getstr(user, sizeof(user), "username");
+    getstr(pass, sizeof(pass), "password");
+    getstr(cmdbuf, sizeof(cmdbuf), "command");
+    setpwent();
+    pwd = getpwnam(user);
 #ifdef AFS_SUN5_ENV
-       (void) setspent();      /* Shadow password file */
-       shpwd = getspnam(user);
-       if (pwd == NULL || shpwd == NULL) {
+    (void)setspent();          /* Shadow password file */
+    shpwd = getspnam(user);
+    if (pwd == NULL || shpwd == NULL) {
 #else
-       if (pwd == NULL) {
+    if (pwd == NULL) {
 #endif
-               error("Login Incorrect..\n");
-               exit(1);
-       }
-       endpwent();
+       error("Login Incorrect..\n");
+       exit(1);
+    }
+    endpwent();
 #ifdef AFS_SUN5_ENV
-       endspent();
-       password = shpwd->sp_pwdp;
+    endspent();
+    password = shpwd->sp_pwdp;
 #else
-       password = pwd->pw_passwd;
+    password = pwd->pw_passwd;
 #endif
-       if (*password != '\0') {
-           char *reason;
+    if (*password != '\0') {
+       char *reason;
 
-           setpag();   /* Also set a pag */
-           /*
-            * If it's called as "root" we don't bother with afs authentication...
-            */
-           if (strcmp(user, "root")) {
-               /* changed from ka_UserAuthenticate *
-                * to get password_expires information */
-                if(ka_UserAuthenticateGeneral(
-                           KA_USERAUTH_VERSION + KA_USERAUTH_DOSETPAG,
-                           user, /* kerberos name */
-                           NULL, /* instance */
-                           NULL, /* realm */
-                            pass, /* password */
-                            0, /* default lifetime */
-                            &password_expires,
-                            0, /* spare 2 */
-                            &reason /* error string */
-                            )) {
+       setpag();               /* Also set a pag */
+       /*
+        * If it's called as "root" we don't bother with afs authentication...
+        */
+       if (strcmp(user, "root")) {
+           /* changed from ka_UserAuthenticate *
+            * to get password_expires information */
+           if (ka_UserAuthenticateGeneral(KA_USERAUTH_VERSION + KA_USERAUTH_DOSETPAG, user,    /* kerberos name */
+                                          NULL,        /* instance */
+                                          NULL,        /* realm */
+                                          pass,        /* password */
+                                          0,   /* default lifetime */
+                                          &password_expires, 0,        /* spare 2 */
+                                          &reason      /* error string */
+               )) {
 
-                       afsauthok = 0;
-               }
-           } else
                afsauthok = 0;
-           /*
-             if (strcmp(user, "root") &&
-             strcmp(password, NO_VICE_AUTH_PWD)) {
-             rc = U_Authenticate(user, pass, &cToken, &sToken);
-             } else
-             rc = AUTH_FAILED;
-             */
-           namep = crypt(pass, password);
-           if (strcmp(namep, password) && !afsauthok) {
-               error("Password Incorrect..\n");
-               exit(1);
            }
+       } else
+           afsauthok = 0;
+       /*
+        * if (strcmp(user, "root") &&
+        * strcmp(password, NO_VICE_AUTH_PWD)) {
+        * rc = U_Authenticate(user, pass, &cToken, &sToken);
+        * } else
+        * rc = AUTH_FAILED;
+        */
+       namep = crypt(pass, password);
+       if (strcmp(namep, password) && !afsauthok) {
+           error("Password Incorrect..\n");
+           exit(1);
        }
-       if (chdir(pwd->pw_dir) < 0) {
-               error("No remote directory.\n");
-               exit(1);
+    }
+    if (chdir(pwd->pw_dir) < 0) {
+       error("No remote directory.\n");
+       exit(1);
+    }
+    (void)write(2, "\0", 1);
+    if (port) {
+       (void)pipe(pv);
+       pid = fork();
+       if (pid == (int)-1) {
+           error("Try again.\n");
+           exit(1);
        }
-       (void) write(2, "\0", 1);
-       if (port) {
-               (void) pipe(pv);
-               pid = fork();
-               if (pid == (int)-1)  {
-                       error("Try again.\n");
-                       exit(1);
+       if (pid) {
+           (void)close(0);
+           (void)close(1);
+           (void)close(2);
+           (void)close(f);
+           (void)close(pv[1]);
+           FD_ZERO(&readfrom);
+           FD_SET(s, &readfrom);
+           FD_SET(pv[0], &readfrom);
+           ioctl(pv[1], FIONBIO, (char *)&one);
+           /* should set s nbio! */
+           for (;;) {
+               int maxfd;
+               maxfd = -1;
+               if (FD_ISSET(s, &readfrom) && maxfd < s)
+                   maxfd = s;
+               if (FD_ISSET(pv[0], &readfrom) && maxfd < pv[0])
+                   maxfd = pv[0];
+               if (maxfd == -1)
+                   break;
+               ready = readfrom;
+               (void)select(maxfd + 1, &ready, (fd_set *) 0, (fd_set *) 0,
+                            NULL);
+               if (FD_ISSET(s, &ready)) {
+                   if (read(s, &sig, 1) <= 0)
+                       FD_CLR(s, &readfrom);
+                   else
+                       killpg(pid, sig);
                }
-               if (pid) {
-                       (void) close(0); (void) close(1); (void) close(2);
-                       (void) close(f); (void) close(pv[1]);
-                       FD_ZERO(&readfrom);
-                       FD_SET(s, &readfrom);
-                       FD_SET(pv[0], &readfrom);
-                       ioctl(pv[1], FIONBIO, (char *)&one);
-                       /* should set s nbio! */
-                       for (;;) {
-                               int maxfd;
-                               maxfd = -1;
-                               if (FD_ISSET(s, &readfrom) && maxfd < s)
-                                       maxfd = s;
-                               if (FD_ISSET(pv[0], &readfrom) && maxfd < pv[0])
-                                       maxfd = pv[0];
-                               if (maxfd == -1)
-                                       break;
-                               ready = readfrom;
-                               (void) select(maxfd+1, &ready, (fd_set *)0,
-                                   (fd_set *)0, NULL);
-                               if (FD_ISSET(s, &ready)) {
-                                       if (read(s, &sig, 1) <= 0)
-                                               FD_CLR(s, &readfrom);
-                                       else
-                                               killpg(pid, sig);
-                               }
-                               if (FD_ISSET(pv[0], &ready)) {
-                                       cc = read(pv[0], buf, sizeof (buf));
-                                       if (cc <= 0) {
-                                               shutdown(s, 1+1);
-                                               FD_CLR(pv[0], &readfrom);
-                                       } else
-                                               (void) write(s, buf, cc);
-                               }
-                       }
-                       exit(0);
+               if (FD_ISSET(pv[0], &ready)) {
+                   cc = read(pv[0], buf, sizeof(buf));
+                   if (cc <= 0) {
+                       shutdown(s, 1 + 1);
+                       FD_CLR(pv[0], &readfrom);
+                   } else
+                       (void)write(s, buf, cc);
                }
-               setpgid(0, getpid());
-               (void) close(s); (void)close(pv[0]);
-               dup2(pv[1], 2);
+           }
+           exit(0);
        }
-       if (*pwd->pw_shell == '\0')
-               pwd->pw_shell = "/bin/sh";
-       if (f > 2)
-               (void) close(f);
+       setpgid(0, getpid());
+       (void)close(s);
+       (void)close(pv[0]);
+       dup2(pv[1], 2);
+    }
+    if (*pwd->pw_shell == '\0')
+       pwd->pw_shell = "/bin/sh";
+    if (f > 2)
+       (void)close(f);
 
 #ifdef AFS_AIX_ENV
-        /* For 7403 - try setting ulimit here */
-        /*
-         * Need to set user's ulimit, else system default
-         */
-        if (setpcred(pwd->pw_name, NULL) < 0) {
-              error("Can't set user credentials.\n");
-             exit(1);
-        }
+    /* For 7403 - try setting ulimit here */
+    /*
+     * Need to set user's ulimit, else system default
+     */
+    if (setpcred(pwd->pw_name, NULL) < 0) {
+       error("Can't set user credentials.\n");
+       exit(1);
+    }
 #endif /* AFS_AIX_ENV */
 
-       /*
-        * For both setgid() and setuid() we should have checked for errors but we ignore them since
-        * they may fail in afs...
-        */
-       (void) setgid((gid_t)pwd->pw_gid);
-       initgroups(pwd->pw_name, pwd->pw_gid);
-       (void) setuid((uid_t)pwd->pw_uid);
+    /*
+     * For both setgid() and setuid() we should have checked for errors but we ignore them since
+     * they may fail in afs...
+     */
+    (void)setgid((gid_t) pwd->pw_gid);
+    initgroups(pwd->pw_name, pwd->pw_gid);
+    (void)setuid((uid_t) pwd->pw_uid);
 #ifndef        AFS_AIX_ENV
-       environ = envinit;
-       strncat(env_home, pwd->pw_dir, sizeof(env_home)-6);
-       strncat(env_shell, pwd->pw_shell, sizeof(env_shell)-7);
-       strncat(env_user, pwd->pw_name, sizeof(env_user)-6);
-       strncat(env_logname, pwd->pw_name, sizeof(env_logname)-9);
-       /* Determine if password expiration is used
-        * if not, take out env_password_expires string from envinit */
-       if ((password_expires >= 0)  && (password_expires < 255)) {
-               sprintf(env_password_expires,"%s%d", env_password_expires, password_expires);
-       } else {
-               /* taking out PASSWORD_EXPIRES env var from array */
+    environ = envinit;
+    strncat(env_home, pwd->pw_dir, sizeof(env_home) - 6);
+    strncat(env_shell, pwd->pw_shell, sizeof(env_shell) - 7);
+    strncat(env_user, pwd->pw_name, sizeof(env_user) - 6);
+    strncat(env_logname, pwd->pw_name, sizeof(env_logname) - 9);
+    /* Determine if password expiration is used
+     * if not, take out env_password_expires string from envinit */
+    if ((password_expires >= 0) && (password_expires < 255)) {
+       sprintf(env_password_expires, "%s%d", env_password_expires,
+               password_expires);
+    } else {
+       /* taking out PASSWORD_EXPIRES env var from array */
 #if    defined(AFS_OSF_ENV)
-               envinit[6] = 0;
+       envinit[6] = 0;
 #else
-               envinit[5] = 0;
+       envinit[5] = 0;
 #endif /* AFS_OSF_ENV */
-       }
+    }
 #else
-       penvlist = getpenv(PENV_USR); 
-       environ = penvlist +1 ;
-       addenvvar("HOME", pwd->pw_dir);
-       addenvvar("SHELL", pwd->pw_shell);
-       addenvvar("PATH", PATHENV);
-       addenvvar("LOGNAME", pwd->pw_name);
-       addenvvar("USER", pwd->pw_name);
-       /* Determine if password expiration is used
-         * if not, take out env_password_expires string from envinit */
-        if ((password_expires >= 0)  && (password_expires < 255)) {
-               sprintf(pwd_expires_str,"%d", password_expires);
-               addenvvar("PASSWORD_EXPIRES", pwd_expires_str);
-       } 
+    penvlist = getpenv(PENV_USR);
+    environ = penvlist + 1;
+    addenvvar("HOME", pwd->pw_dir);
+    addenvvar("SHELL", pwd->pw_shell);
+    addenvvar("PATH", PATHENV);
+    addenvvar("LOGNAME", pwd->pw_name);
+    addenvvar("USER", pwd->pw_name);
+    /* Determine if password expiration is used
+     * if not, take out env_password_expires string from envinit */
+    if ((password_expires >= 0) && (password_expires < 255)) {
+       sprintf(pwd_expires_str, "%d", password_expires);
+       addenvvar("PASSWORD_EXPIRES", pwd_expires_str);
+    }
 #endif
-       cp = strrchr(pwd->pw_shell, '/');
-       if (cp)
-               cp++;
-       else
-               cp = pwd->pw_shell;
-       execl(pwd->pw_shell, cp, "-c", cmdbuf, 0);
-       perror(pwd->pw_shell);
-       exit(1);
+    cp = strrchr(pwd->pw_shell, '/');
+    if (cp)
+       cp++;
+    else
+       cp = pwd->pw_shell;
+    execl(pwd->pw_shell, cp, "-c", cmdbuf, 0);
+    perror(pwd->pw_shell);
+    exit(1);
 }
 
 #ifdef AFS_AIX_ENV
-addenvvar(tag,value)
-  char *tag,*value;
+addenvvar(tag, value)
+     char *tag, *value;
 {
-    char    *penv;
-    unsigned int len = strlen(tag)+1;       /* allow for '=' */
+    char *penv;
+    unsigned int len = strlen(tag) + 1;        /* allow for '=' */
+
     if (!tag) {
        errno = EINVAL;
        perror("rexecd, addenvvar");
        exit(1);
     }
-    if (value) len+= strlen(value);
-    penv = malloc(len+1);
-    strcpy(penv,tag);
-    strcat(penv,"=");
-    if (value) strcat(penv,value);
-    if (putenv(penv)<0) {
+    if (value)
+       len += strlen(value);
+    penv = malloc(len + 1);
+    strcpy(penv, tag);
+    strcat(penv, "=");
+    if (value)
+       strcat(penv, value);
+    if (putenv(penv) < 0) {
        perror("rexecd, putenv");
        exit(1);
     }
@@ -364,30 +376,30 @@ addenvvar(tag,value)
 
 /*VARARGS1*/
 error(fmt, a1, a2, a3)
-       char *fmt;
-       int a1, a2, a3;
+     char *fmt;
+     int a1, a2, a3;
 {
-       char buf[BUFSIZ];
+    char buf[BUFSIZ];
 
-       buf[0] = 1;
-       (void) sprintf(buf+1, fmt, a1, a2, a3);
-       (void) write(2, buf, strlen(buf));
+    buf[0] = 1;
+    (void)sprintf(buf + 1, fmt, a1, a2, a3);
+    (void)write(2, buf, strlen(buf));
 }
 
 getstr(buf, cnt, err)
-       char *buf;
-       int cnt;
-       char *err;
+     char *buf;
+     int cnt;
+     char *err;
 {
-       char c;
+    char c;
 
-       do {
-               if (read(0, &c, 1) != 1)
-                       exit(1);
-               *buf++ = c;
-               if (--cnt == 0) {
-                       error("%s too long\n", (int)err,0,0);
-                       exit(1);
-               }
-       } while (c != 0);
+    do {
+       if (read(0, &c, 1) != 1)
+           exit(1);
+       *buf++ = c;
+       if (--cnt == 0) {
+           error("%s too long\n", (int)err, 0, 0);
+           exit(1);
+       }
+    } while (c != 0);
 }