home *** CD-ROM | disk | FTP | other *** search
/ PDA Software Library / pdasoftwarelib.iso / PSION / COMMS / P3NFS / NFSD / MP_MAIN.C < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-31  |  3.7 KB  |  184 lines

  1. #include <stdio.h>
  2. #include <signal.h>
  3. #include <fcntl.h>
  4. #include <pwd.h>
  5. #include "nfs_prot.h"
  6. #include "mp.h"
  7. #include "version.h"
  8. #include "config.h"
  9. #ifdef __svr4__
  10. #include <stdlib.h>        /* getenv */
  11. #include <string.h>        /* strcmp */
  12. #endif
  13.  
  14. extern void nfs_program_2();
  15.  
  16. static char
  17.   *dev  = DDEV,
  18.   *user,
  19.   *dir  = DDIR;
  20. static int
  21.   speed = 0;
  22.  
  23. int psionfd, gmtoffset, debug, exiting, psion_alive, dowakeup = 0, old_nfsc = 0,
  24.     query_cache = 0, background = 1;
  25. fattr root_fattr = {
  26.   NFDIR, 0040500, 1, 0, 0,
  27.   BLOCKSIZE, BLOCKSIZE, FID, 1, FID, 1,
  28.   {0, 0},
  29.   {0, 0},
  30.   {0, 0}
  31. };
  32.  
  33. char *disconnprog, *connprog, *shell = 0;
  34.  
  35. static void
  36. usr1_handler SIGARG
  37. {
  38.   debug = (debug+1) & 3;
  39. }
  40.  
  41. #if defined(hpux) || defined(__svr4__) || defined(__sgi)
  42. void
  43. usleep(usec)
  44. int usec;
  45. {
  46.   struct timeval t;
  47.  
  48.   t.tv_sec = (long) (usec / 1000000);
  49.   t.tv_usec= (long) (usec % 1000000);
  50.   select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &t);
  51. }
  52. #endif /* hpux */
  53.  
  54. void
  55. main(ac, av)
  56.   int ac;
  57.   char *av[];
  58. {
  59.   struct passwd *pw;
  60.   struct timeval tv;
  61.   struct timezone tz;
  62.   p_inode *rp;
  63.   nfs_fh root_fh;
  64.  
  65.   if(!(user = (char *)getenv("USER")))
  66.     user = (char *)getenv("logname");
  67.     
  68.   while(ac > 1)
  69.     {
  70.       if(!strcmp(av[1], "-v"))
  71.     {
  72.       debug++;
  73.     }
  74.       else if(!strcmp(av[1], "-dir"))
  75.     {
  76.       dir = av[2]; ac--;av++;
  77.     }
  78.       else if(!strcmp(av[1], "-user") || !strcmp(av[1], "-u"))
  79.     {
  80.       user = av[2]; ac--;av++;
  81.     }
  82.       else if(!strcmp(av[1], "-conn"))
  83.     {
  84.       connprog = av[2]; ac--; av++;
  85.     }
  86.       else if(!strcmp(av[1], "-disconn"))
  87.     {
  88.       disconnprog = av[2]; ac--; av++;
  89.     }
  90.       else if(!strcmp(av[1], "-wakeup"))
  91.     {
  92.       dowakeup = 1;
  93.     }
  94.       else if(!strcmp(av[1], "-tty"))
  95.     {
  96.       dev = av[2]; ac--;av++;
  97.     }
  98. #ifdef PTY
  99.       else if(!strcmp(av[1], "-shell"))
  100.     {
  101.       shell = av[2]; ac--;av++;
  102.     }
  103. #endif
  104.       else if(!strcmp(av[1], "-oldnfsc"))
  105.     {
  106.       old_nfsc = 1;
  107.     }
  108.       else if (!strcmp(av[1], "-speed"))
  109.         {
  110.       speed = atoi(av[2]);
  111.       ac--; av++;
  112.     }
  113.       else if (!strcmp(av[1], "-"))
  114.         {
  115.       background = 0;
  116.     }
  117.       else
  118.     {
  119.       printf("Usage: p3nfsd [-dir directory] [-user username] [-tty ser-dev] [-speed baudrate]\n");
  120.       printf("              [-conn prog] [-disconn prog] [-wakeup] [-v]\n");
  121. #ifdef PTY
  122.       printf("              [-shell prog] [-oldnfsc] [-]\n");
  123. #else
  124.       printf("              [-oldnfsc] [-]\n");
  125. #endif
  126.       printf("Defaults: -dir %s -user %s -tty %s -speed %d\n", dir, user, dev, DSPEED);
  127.       exit(1);
  128.     }
  129.       ac--;av++;
  130.     }
  131.   
  132.   if (user && *user)
  133.     {
  134.       if(!(pw = getpwnam(user)))
  135.     {
  136.       fprintf(stderr, "User %s not found.\n", user);
  137.       exit(1);
  138.     }
  139.     }
  140.   else if(!(pw = getpwuid(getuid())))
  141.     {
  142.       fprintf(stderr, "You don't exist, go away!\n");
  143.       exit(1);
  144.     }
  145.   if (getuid() && pw->pw_uid != getuid())
  146.     {
  147.       fprintf(stderr, "%s? You must be kidding...\n", user);
  148.       exit(1);
  149.     }
  150.   root_fattr.uid = pw->pw_uid;
  151.   root_fattr.gid = pw->pw_gid;
  152.   endpwent();
  153.  
  154.   gettimeofday(&tv, &tz);
  155. #ifndef __svr4__
  156.   gmtoffset = -tz.tz_minuteswest * 60;
  157. #else
  158.   tzset();
  159.   gmtoffset = -timezone;
  160. #endif
  161.  
  162.   if(!background)
  163.     dev = "stdin";
  164.   if(speed == 0 && background)
  165.     speed = DSPEED;
  166.   printf("p3nfsd: version %s, using %s (%d), mounting on %s\n", VERSION, dev, speed, dir);
  167.  
  168.   if (!old_nfsc && shell)
  169.     init_pty();
  170.  
  171.   psionfd = init_serial(dev, speed);
  172.  
  173.   rp = get_nam("");
  174.   inode2fh(rp->inode, root_fh.data);
  175.   root_fattr.fileid = rp->inode;
  176.   root_fattr.atime.seconds = root_fattr.mtime.seconds = 
  177.   root_fattr.ctime.seconds = tv.tv_sec;
  178.  
  179.   signal(SIGUSR1, usr1_handler);
  180.  
  181.   mount_and_run(dir, dev, nfs_program_2, &root_fh);
  182.   exit(0);
  183. }
  184.