Advertisement
FlyFar

virtual.c

May 16th, 2024
475
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.07 KB | Cybersecurity | 0 0
  1. #ifdef VIRTUAL
  2. #include <sys/socket.h>
  3. #include <netinet/in.h>
  4. #include <arpa/inet.h>
  5. #include <netdb.h>
  6. #include <stdio.h>
  7.  
  8. #include "pop3.h"
  9.  
  10. /* Real globals used in other files. */
  11. int virtual_mode=0;
  12. extern char *svr_hostname;
  13. char *virt_spooldir=0;
  14. char *virt_workdir=0;
  15.  
  16. /* Local globals only seen in this file */
  17. static struct sockaddr_in virtual_addr;
  18. static struct sockaddr_in *virtual_ptr;
  19.  
  20.  
  21. struct virttable {
  22.     char *ipaddr;
  23.     char *spooldir;
  24.     char *workdir;
  25. };
  26. static struct virttable virt_table[]={
  27.     {"127.0.0.1",       "/usr/spool/mail/", "/usr/tmp/.pop/"},
  28.     {"204.181.147.2",   "/usr/spool/mail/", "/usr/tmp/.pop/"},
  29.     {NULL, NULL}
  30. };
  31.  
  32. void
  33. get_virt(char *ip) {
  34.     int i;
  35.  
  36.     if(virtual_mode) {
  37.         for(i=0; virt_table[i].ipaddr; ++i) {
  38.             if( !strcmp(virt_table[i].ipaddr,ip) ) {
  39.                 virt_workdir = virt_table[i].workdir;
  40.                 virt_spooldir= virt_table[i].spooldir;
  41.                 return;
  42.             }
  43.         } /* end for */
  44.     } /* end if*/
  45.     return;
  46.  
  47. } /* end get_virt */
  48.  
  49.  
  50. void
  51. virt_init() {
  52.     int virtual_len;
  53.     char *cptr;
  54.     struct hostent *hostent;
  55.  
  56.     virtual_len = sizeof(virtual_addr);
  57.     if (getsockname(0, (struct sockaddr *) &virtual_addr,
  58.             &virtual_len) >= 0) {
  59.         virtual_mode = 1;
  60.         virtual_ptr = (struct sockaddr_in *) &virtual_addr;
  61.         free(svr_hostname);
  62.         cptr = inet_ntoa(virtual_ptr->sin_addr);
  63.         if(hostent=gethostbyaddr((char *) &virtual_ptr->sin_addr,
  64.                 sizeof(struct in_addr),AF_INET)) {
  65.             svr_hostname = malloc(strlen(hostent->h_name)+1);
  66.             if (svr_hostname == NULL)
  67.                 fail(FAIL_OUT_OF_MEMORY);
  68.             strcpy(svr_hostname,hostent->h_name);
  69.         } else {
  70.             svr_hostname = malloc(strlen(cptr)+1);
  71.             if (svr_hostname == NULL)
  72.                 fail(FAIL_OUT_OF_MEMORY);
  73.             strcpy(svr_hostname,cptr);
  74.         }
  75.     }
  76.  
  77.     get_virt(cptr);
  78.  
  79. } /* end virt_init */
  80.  
  81. #endif
  82. #if 0
  83.  
  84. unix_pass(name, passwd)
  85. char    *name;
  86. char    *passwd;
  87. {
  88.     struct passwd   *pwd;
  89.     struct passwd   *getpwnam();
  90.     char        *encpw;
  91.     char        *crypt();
  92.     char        *encrypted_pass;
  93. #if !defined(NOSHADOW)
  94.     struct spwd *spwd;
  95.  
  96.    
  97.     if((spwd = fgetspnam(name)) == NULL) {
  98.         return(-1);
  99.     }
  100.     encrypted_pass = spwd->sp_pwdp;
  101.  
  102. #else  /* !NOSHADOW */
  103.  
  104.    
  105.     if((pwd = fgetpwnam(name)) == NULL) {
  106.         return(-1);
  107.     }
  108.     encrypted_pass = pwd->pw_passwd;
  109.  
  110. #endif /* !NOSHADOW */
  111.    
  112.    
  113.     encpw = crypt(passwd, encrypted_pass);
  114.  
  115.     /* Check it */
  116.     if(strcmp(encpw, encrypted_pass)) {
  117.         return(-1);
  118.     }
  119.     return(0);
  120. }
  121.  
  122.  
  123. struct passwd *
  124. fgetpwnam(char *name)
  125. {
  126.     struct passwd *pw;
  127.     FILE *fp;
  128.  
  129.     if( (fp=fopen(RAD_PASSWD,"r")) == NULL ) {
  130.         perror("Couldn't open radius passwd file");
  131.         exit(1);
  132.     }
  133.  
  134.     while ( pw=fgetpwent(fp) ) {
  135.         if( !strcmp(name,pw->pw_name) ) {
  136.             fclose(fp);
  137.             return( pw );
  138.         }
  139.     }
  140.     fclose(fp);
  141.     return( NULL );
  142. } /* end fgetpwnam */
  143.  
  144. struct spwd *
  145. fgetspnam(char *name)
  146. {
  147.     struct spwd *pw;
  148.     FILE *fp;
  149.  
  150.     if( (fp=fopen(RAD_SHADOW,"r")) == NULL ) {
  151.         perror("Couldn't open radius shadow file");
  152.         exit(1);
  153.     }
  154.  
  155.     while ( pw=fgetspent(fp) ) {
  156.         if( !strcmp(name,pw->sp_namp) ) {
  157.             fclose(fp);
  158.             return( pw );
  159.         }
  160.     }
  161.     fclose(fp);
  162.     return( NULL );
  163.  
  164. } /* end fgetspnam */
  165.  
  166. #endif
  167.  
  168.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement