[BACK]Return to tildexpand.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/Attic/tildexpand.c between version 1.2 and 1.3

version 1.2, 1999/09/30 16:48:48 version 1.3, 1999/11/23 22:25:56
Line 20 
Line 20 
 /* Expands tildes in the file name.  Returns data allocated by xmalloc.  /* Expands tildes in the file name.  Returns data allocated by xmalloc.
    Warning: this calls getpw*. */     Warning: this calls getpw*. */
   
 char *tilde_expand_filename(const char *filename, uid_t my_uid)  char *
   tilde_expand_filename(const char *filename, uid_t my_uid)
 {  {
   const char *cp;          const char *cp;
   unsigned int userlen;          unsigned int userlen;
   char *expanded;          char *expanded;
   struct passwd *pw;          struct passwd *pw;
   char user[100];          char user[100];
   
   /* Return immediately if no tilde. */          /* Return immediately if no tilde. */
   if (filename[0] != '~')          if (filename[0] != '~')
     return xstrdup(filename);                  return xstrdup(filename);
   
   /* Skip the tilde. */          /* Skip the tilde. */
   filename++;          filename++;
   
   /* Find where the username ends. */          /* Find where the username ends. */
   cp = strchr(filename, '/');          cp = strchr(filename, '/');
   if (cp)          if (cp)
     userlen = cp - filename;  /* Have something after username. */                  userlen = cp - filename;        /* Have something after username. */
   else          else
     userlen = strlen(filename); /* Nothign after username. */                  userlen = strlen(filename);     /* Nothign after username. */
   if (userlen == 0)          if (userlen == 0)
     pw = getpwuid(my_uid);  /* Own home directory. */                  pw = getpwuid(my_uid);  /* Own home directory. */
   else          else {
     {                  /* Tilde refers to someone elses home directory. */
       /* Tilde refers to someone elses home directory. */                  if (userlen > sizeof(user) - 1)
       if (userlen > sizeof(user) - 1)                          fatal("User name after tilde too long.");
         fatal("User name after tilde too long.");                  memcpy(user, filename, userlen);
       memcpy(user, filename, userlen);                  user[userlen] = 0;
       user[userlen] = 0;                  pw = getpwnam(user);
       pw = getpwnam(user);          }
     }          /* Check that we found the user. */
           if (!pw)
                   fatal("Unknown user %100s.", user);
   
   /* Check that we found the user. */          /* If referring to someones home directory, return it now. */
   if (!pw)          if (!cp) {              /* Only home directory specified */
     fatal("Unknown user %100s.", user);                  return xstrdup(pw->pw_dir);
           }
   /* If referring to someones home directory, return it now. */          /* Build a path combining the specified directory and path. */
   if (!cp)          expanded = xmalloc(strlen(pw->pw_dir) + strlen(cp + 1) + 2);
     { /* Only home directory specified */          sprintf(expanded, "%s/%s", pw->pw_dir, cp + 1);
       return xstrdup(pw->pw_dir);          return expanded;
     }  
   
   /* Build a path combining the specified directory and path. */  
   expanded = xmalloc(strlen(pw->pw_dir) + strlen(cp + 1) + 2);  
   sprintf(expanded, "%s/%s", pw->pw_dir, cp + 1);  
   return expanded;  
 }  }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3