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

Diff for /src/usr.bin/ssh/auth.c between version 1.58 and 1.58.2.1

version 1.58, 2005/03/14 11:44:42 version 1.58.2.1, 2005/09/04 18:39:52
Line 64 
Line 64 
         struct stat st;          struct stat st;
         const char *hostname = NULL, *ipaddr = NULL;          const char *hostname = NULL, *ipaddr = NULL;
         char *shell;          char *shell;
         int i;          u_int i;
   
         /* Shouldn't be called if pw is NULL, but better safe than sorry... */          /* Shouldn't be called if pw is NULL, but better safe than sorry... */
         if (!pw || !pw->pw_name)          if (!pw || !pw->pw_name)
Line 217 
Line 217 
  *   *
  * This returns a buffer allocated by xmalloc.   * This returns a buffer allocated by xmalloc.
  */   */
 char *  static char *
 expand_filename(const char *filename, struct passwd *pw)  expand_authorized_keys(const char *filename, struct passwd *pw)
 {  {
         Buffer buffer;          char *file, *ret;
         char *file;  
         const char *cp;  
   
         /*          file = percent_expand(filename, "h", pw->pw_dir,
          * Build the filename string in the buffer by making the appropriate              "u", pw->pw_name, (char *)NULL);
          * substitutions to the given file name.  
          */  
         buffer_init(&buffer);  
         for (cp = filename; *cp; cp++) {  
                 if (cp[0] == '%' && cp[1] == '%') {  
                         buffer_append(&buffer, "%", 1);  
                         cp++;  
                         continue;  
                 }  
                 if (cp[0] == '%' && cp[1] == 'h') {  
                         buffer_append(&buffer, pw->pw_dir, strlen(pw->pw_dir));  
                         cp++;  
                         continue;  
                 }  
                 if (cp[0] == '%' && cp[1] == 'u') {  
                         buffer_append(&buffer, pw->pw_name,  
                             strlen(pw->pw_name));  
                         cp++;  
                         continue;  
                 }  
                 buffer_append(&buffer, cp, 1);  
         }  
         buffer_append(&buffer, "\0", 1);  
   
         /*          /*
          * Ensure that filename starts anchored. If not, be backward           * Ensure that filename starts anchored. If not, be backward
          * compatible and prepend the '%h/'           * compatible and prepend the '%h/'
          */           */
         file = xmalloc(MAXPATHLEN);          if (*file == '/')
         cp = buffer_ptr(&buffer);                  return (file);
         if (*cp != '/')  
                 snprintf(file, MAXPATHLEN, "%s/%s", pw->pw_dir, cp);  
         else  
                 strlcpy(file, cp, MAXPATHLEN);  
   
         buffer_free(&buffer);          ret = xmalloc(MAXPATHLEN);
         return file;          if (strlcpy(ret, pw->pw_dir, MAXPATHLEN) >= MAXPATHLEN ||
               strlcat(ret, "/", MAXPATHLEN) >= MAXPATHLEN ||
               strlcat(ret, file, MAXPATHLEN) >= MAXPATHLEN)
                   fatal("expand_authorized_keys: path too long");
   
           xfree(file);
           return (ret);
 }  }
   
 char *  char *
 authorized_keys_file(struct passwd *pw)  authorized_keys_file(struct passwd *pw)
 {  {
         return expand_filename(options.authorized_keys_file, pw);          return expand_authorized_keys(options.authorized_keys_file, pw);
 }  }
   
 char *  char *
 authorized_keys_file2(struct passwd *pw)  authorized_keys_file2(struct passwd *pw)
 {  {
         return expand_filename(options.authorized_keys_file2, pw);          return expand_authorized_keys(options.authorized_keys_file2, pw);
 }  }
   
 /* return ok if key exists in sysfile or userfile */  /* return ok if key exists in sysfile or userfile */

Legend:
Removed from v.1.58  
changed lines
  Added in v.1.58.2.1