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

Diff for /src/usr.bin/ssh/Attic/auth-rsa.c between version 1.23.2.1 and 1.23.2.2

version 1.23.2.1, 2000/06/12 02:37:31 version 1.23.2.2, 2000/09/01 18:23:17
Line 16 
Line 16 
  */   */
   
 #include "includes.h"  #include "includes.h"
 RCSID("$Id$");  RCSID("$OpenBSD$");
   
 #include "rsa.h"  #include "rsa.h"
 #include "packet.h"  #include "packet.h"
Line 26 
Line 26 
 #include "uidswap.h"  #include "uidswap.h"
 #include "match.h"  #include "match.h"
 #include "servconf.h"  #include "servconf.h"
   #include "auth-options.h"
   
 #include <openssl/rsa.h>  #include <openssl/rsa.h>
 #include <openssl/md5.h>  #include <openssl/md5.h>
   
 /* Flags that may be set in authorized_keys options. */  
 extern int no_port_forwarding_flag;  
 extern int no_agent_forwarding_flag;  
 extern int no_x11_forwarding_flag;  
 extern int no_pty_flag;  
 extern char *forced_command;  
 extern struct envstring *custom_environment;  
   
 /*  /*
  * Session identifier that is used to bind key exchange and authentication   * Session identifier that is used to bind key exchange and authentication
  * responses to a particular session.   * responses to a particular session.
Line 133 
Line 126 
         unsigned long linenum = 0;          unsigned long linenum = 0;
         struct stat st;          struct stat st;
         RSA *pk;          RSA *pk;
         int mname, mip;  
   
         /* Temporarily use the user's uid. */          /* Temporarily use the user's uid. */
         temporarily_use_uid(pw->pw_uid);          temporarily_use_uid(pw->pw_uid);
Line 187 
Line 179 
                 }                  }
                 if (fail) {                  if (fail) {
                         fclose(f);                          fclose(f);
                         log(buf);                          log("%s",buf);
                         packet_send_debug(buf);                          packet_send_debug("%s",buf);
                         restore_uid();                          restore_uid();
                         return 0;                          return 0;
                 }                  }
Line 269 
Line 261 
                  * authenticated. Note that we have not yet processed the                   * authenticated. Note that we have not yet processed the
                  * options; this will be reset if the options cause the                   * options; this will be reset if the options cause the
                  * authentication to be rejected.                   * authentication to be rejected.
                  */  
                 authenticated = 1;  
   
                 /* RSA part of authentication was accepted.  Now process the options. */  
                 if (options) {  
                         while (*options && *options != ' ' && *options != '\t') {  
                                 cp = "no-port-forwarding";  
                                 if (strncmp(options, cp, strlen(cp)) == 0) {  
                                         packet_send_debug("Port forwarding disabled.");  
                                         no_port_forwarding_flag = 1;  
                                         options += strlen(cp);  
                                         goto next_option;  
                                 }  
                                 cp = "no-agent-forwarding";  
                                 if (strncmp(options, cp, strlen(cp)) == 0) {  
                                         packet_send_debug("Agent forwarding disabled.");  
                                         no_agent_forwarding_flag = 1;  
                                         options += strlen(cp);  
                                         goto next_option;  
                                 }  
                                 cp = "no-X11-forwarding";  
                                 if (strncmp(options, cp, strlen(cp)) == 0) {  
                                         packet_send_debug("X11 forwarding disabled.");  
                                         no_x11_forwarding_flag = 1;  
                                         options += strlen(cp);  
                                         goto next_option;  
                                 }  
                                 cp = "no-pty";  
                                 if (strncmp(options, cp, strlen(cp)) == 0) {  
                                         packet_send_debug("Pty allocation disabled.");  
                                         no_pty_flag = 1;  
                                         options += strlen(cp);  
                                         goto next_option;  
                                 }  
                                 cp = "command=\"";  
                                 if (strncmp(options, cp, strlen(cp)) == 0) {  
                                         int i;  
                                         options += strlen(cp);  
                                         forced_command = xmalloc(strlen(options) + 1);  
                                         i = 0;  
                                         while (*options) {  
                                                 if (*options == '"')  
                                                         break;  
                                                 if (*options == '\\' && options[1] == '"') {  
                                                         options += 2;  
                                                         forced_command[i++] = '"';  
                                                         continue;  
                                                 }  
                                                 forced_command[i++] = *options++;  
                                         }  
                                         if (!*options) {  
                                                 debug("%.100s, line %lu: missing end quote",  
                                                       SSH_USER_PERMITTED_KEYS, linenum);  
                                                 packet_send_debug("%.100s, line %lu: missing end quote",  
                                                                   SSH_USER_PERMITTED_KEYS, linenum);  
                                                 continue;  
                                         }  
                                         forced_command[i] = 0;  
                                         packet_send_debug("Forced command: %.900s", forced_command);  
                                         options++;  
                                         goto next_option;  
                                 }  
                                 cp = "environment=\"";  
                                 if (strncmp(options, cp, strlen(cp)) == 0) {  
                                         int i;  
                                         char *s;  
                                         struct envstring *new_envstring;  
                                         options += strlen(cp);  
                                         s = xmalloc(strlen(options) + 1);  
                                         i = 0;  
                                         while (*options) {  
                                                 if (*options == '"')  
                                                         break;  
                                                 if (*options == '\\' && options[1] == '"') {  
                                                         options += 2;  
                                                         s[i++] = '"';  
                                                         continue;  
                                                 }  
                                                 s[i++] = *options++;  
                                         }  
                                         if (!*options) {  
                                                 debug("%.100s, line %lu: missing end quote",  
                                                       SSH_USER_PERMITTED_KEYS, linenum);  
                                                 packet_send_debug("%.100s, line %lu: missing end quote",  
                                                                   SSH_USER_PERMITTED_KEYS, linenum);  
                                                 continue;  
                                         }  
                                         s[i] = 0;  
                                         packet_send_debug("Adding to environment: %.900s", s);  
                                         debug("Adding to environment: %.900s", s);  
                                         options++;  
                                         new_envstring = xmalloc(sizeof(struct envstring));  
                                         new_envstring->s = s;  
                                         new_envstring->next = custom_environment;  
                                         custom_environment = new_envstring;  
                                         goto next_option;  
                                 }  
                                 cp = "from=\"";  
                                 if (strncmp(options, cp, strlen(cp)) == 0) {  
                                         char *patterns = xmalloc(strlen(options) + 1);  
                                         int i;  
                                         options += strlen(cp);  
                                         i = 0;  
                                         while (*options) {  
                                                 if (*options == '"')  
                                                         break;  
                                                 if (*options == '\\' && options[1] == '"') {  
                                                         options += 2;  
                                                         patterns[i++] = '"';  
                                                         continue;  
                                                 }  
                                                 patterns[i++] = *options++;  
                                         }  
                                         if (!*options) {  
                                                 debug("%.100s, line %lu: missing end quote",  
                                                       SSH_USER_PERMITTED_KEYS, linenum);  
                                                 packet_send_debug("%.100s, line %lu: missing end quote",  
                                                                   SSH_USER_PERMITTED_KEYS, linenum);  
                                                 continue;  
                                         }  
                                         patterns[i] = 0;  
                                         options++;  
                                         /*  
                                          * Deny access if we get a negative  
                                          * match for the hostname or the ip  
                                          * or if we get not match at all  
                                          */  
                                         mname = match_hostname(get_canonical_hostname(),  
                                             patterns, strlen(patterns));  
                                         mip = match_hostname(get_remote_ipaddr(),  
                                             patterns, strlen(patterns));  
                                         if (mname == -1 || mip == -1 ||  
                                             (mname != 1 && mip != 1)) {  
                                                 log("RSA authentication tried for %.100s with correct key but not from a permitted host (host=%.200s, ip=%.200s).",  
                                                     pw->pw_name, get_canonical_hostname(),  
                                                     get_remote_ipaddr());  
                                                 packet_send_debug("Your host '%.200s' is not permitted to use this key for login.",  
                                                 get_canonical_hostname());  
                                                 xfree(patterns);  
                                                 /* key invalid for this host, reset flags */  
                                                 authenticated = 0;  
                                                 no_agent_forwarding_flag = 0;  
                                                 no_port_forwarding_flag = 0;  
                                                 no_pty_flag = 0;  
                                                 no_x11_forwarding_flag = 0;  
                                                 while (custom_environment) {  
                                                         struct envstring *ce = custom_environment;  
                                                         custom_environment = ce->next;  
                                                         xfree(ce->s);  
                                                         xfree(ce);  
                                                 }  
                                                 if (forced_command) {  
                                                         xfree(forced_command);  
                                                         forced_command = NULL;  
                                                 }  
                                                 break;  
                                         }  
                                         xfree(patterns);  
                                         /* Host name matches. */  
                                         goto next_option;  
                                 }  
                 bad_option:  
                                 log("Bad options in %.100s file, line %lu: %.50s",  
                                     SSH_USER_PERMITTED_KEYS, linenum, options);  
                                 packet_send_debug("Bad options in %.100s file, line %lu: %.50s",  
                                                   SSH_USER_PERMITTED_KEYS, linenum, options);  
                                 authenticated = 0;  
                                 break;  
   
                 next_option:  
                                 /*  
                                  * Skip the comma, and move to the next option  
                                  * (or break out if there are no more).  
                                  */  
                                 if (!*options)  
                                         fatal("Bugs in auth-rsa.c option processing.");  
                                 if (*options == ' ' || *options == '\t')  
                                         break;          /* End of options. */  
                                 if (*options != ',')  
                                         goto bad_option;  
                                 options++;  
                                 /* Process the next option. */  
                                 continue;  
                         }  
                 }  
                 /*  
                  * Break out of the loop if authentication was successful;                   * Break out of the loop if authentication was successful;
                  * otherwise continue searching.                   * otherwise continue searching.
                  */                   */
                   authenticated = auth_parse_options(pw, options, linenum);
                 if (authenticated)                  if (authenticated)
                         break;                          break;
         }          }

Legend:
Removed from v.1.23.2.1  
changed lines
  Added in v.1.23.2.2