home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 2: PC / frozenfish_august_1995.bin / bbs / d09xx / d0905.lha / MultiUser / C.src / Passwd.c < prev    next >
C/C++ Source or Header  |  1993-08-26  |  4KB  |  175 lines

  1. /************************************************************
  2. * MultiUser - MultiUser Task/File Support System                *
  3. * ---------------------------------------------------------    *
  4. * Change Password                                                            *
  5. * ---------------------------------------------------------    *
  6. * ⌐ Copyright 1993 by Geert Uytterhoeven                            *
  7. * All Rights Reserved.                                                    *
  8. ************************************************************/
  9.  
  10.  
  11. #include <exec/types.h>
  12. #include <dos/dos.h>
  13. #include <proto/exec.h>
  14. #include <proto/dos.h>
  15. #include <utility/tagitem.h>
  16. #include <proto/reqtools.h>
  17. #include <libraries/reqtools.h>
  18. #include <string.h>
  19. #include <libraries/multiuser.h>
  20. #include <proto/multiuser.h>
  21.  
  22. #include "Passwd_rev.h"
  23.  
  24.  
  25. char __VersTag__[] = VERSTAG;
  26.  
  27.  
  28. void __regargs myputs(char *str, struct DosLibrary *DOSBase);
  29. void __regargs mygets(char *str, struct DosLibrary *DOSBase);
  30.  
  31.  
  32. int __saveds Start(char *arg)
  33. {
  34.     struct ExecBase *SysBase;
  35.     struct DosLibrary *DOSBase;
  36.     struct muBase *muBase = NULL;
  37.     struct ReqToolsBase *ReqToolsBase = NULL;
  38.     char oldpwd[muPASSWORDSIZE+1];
  39.     char newpwd1[muPASSWORDSIZE+1];
  40.     char newpwd2[muPASSWORDSIZE+1];
  41.     struct RDArgs *args;
  42.     LONG argarray[] = {
  43.         NULL
  44.     };
  45.     static struct TagItem allwaystags[] = {
  46.         RT_ReqPos, REQPOS_CENTERSCR,
  47.         RT_LockWindow, TRUE,
  48.         TAG_DONE
  49.     };
  50.     struct TagItem infotags[] = {
  51.         RTEZ_Flags, EZREQF_CENTERTEXT,
  52.         TAG_MORE, (LONG)allwaystags
  53.     };
  54.     struct TagItem pwdtags[] = {
  55.         RTGS_TextFmt, NULL,
  56.         RTGS_Invisible, TRUE,
  57.         RTGS_AllowEmpty, TRUE,
  58.         RTGS_Flags, GSREQF_CENTERTEXT,
  59.         RTGS_GadFmt, (LONG)"OK",
  60.         TAG_MORE, (LONG)allwaystags
  61.     };
  62.     int i;
  63.     int rc = RETURN_ERROR;
  64.  
  65.  
  66.     SysBase = *(struct ExecBase **)4;
  67.     
  68.     if ((!(DOSBase = (struct DosLibrary *)OpenLibrary("dos.library", 37))) ||
  69.          (!(muBase = (struct muBase *)OpenLibrary("multiuser.library", 39))) ||
  70.          (!(ReqToolsBase = (struct ReqToolsBase *)OpenLibrary("reqtools.library", 38)))) {
  71.         rc = RETURN_FAIL;
  72.         goto Exit;
  73.     }
  74.  
  75.     args = ReadArgs("GUI/S", argarray, NULL);
  76.     if (!args)
  77.         PrintFault(IoErr(), NULL);
  78.     else {
  79.         if (argarray[0]) {
  80.             for (i = 0; i <= muPASSWORDSIZE; i++)
  81.                 oldpwd[i] = newpwd1[i] = newpwd2[i] = '\0';
  82.             pwdtags[0].ti_Data = (LONG)"Enter your old password";
  83.             rtGetStringA(oldpwd, muPASSWORDSIZE, "MultiUser Passwd Request", NULL, pwdtags);
  84.             pwdtags[0].ti_Data = (LONG)"Enter your new password";
  85.             rtGetStringA(newpwd1, muPASSWORDSIZE, "MultiUser Passwd Request", NULL, pwdtags);
  86.             pwdtags[0].ti_Data = (LONG)"Retype your new password";
  87.             rtGetStringA(newpwd2, muPASSWORDSIZE, "MultiUser Passwd Request", NULL, pwdtags);
  88.         } else {
  89.             myputs("\nOld password        : ", DOSBase);
  90.             mygets(oldpwd, DOSBase);
  91.             myputs("\n\nNew password        : ", DOSBase);
  92.             mygets(newpwd1, DOSBase);
  93.             myputs("\n\nRetype new password : ", DOSBase);
  94.             mygets(newpwd2, DOSBase);
  95.             myputs("\n\n", DOSBase);
  96.         };
  97.  
  98.         if (strcmp(newpwd1, newpwd2))
  99.             if (argarray[0])
  100.                 rtEZRequestA("Error retyping new password", "OK", NULL, NULL, infotags);
  101.             else
  102.                 myputs("Error retyping new password\n", DOSBase);
  103.         else
  104.             if (muPasswd(oldpwd, newpwd1)) {
  105.                 if (argarray[0])
  106.                     rtEZRequestA("Password successfully changed", "OK", NULL, NULL, infotags);
  107.                 else
  108.                     myputs("Password successfully changed\n", DOSBase);
  109.                 rc = RETURN_OK;
  110.             } else
  111.                 if (argarray[0])
  112.                     rtEZRequestA("Changing password failed", "OK", NULL, NULL, infotags);
  113.                 else
  114.                     myputs("Changing password failed\n", DOSBase);
  115.     }
  116.     FreeArgs(args);
  117.  
  118. Exit:
  119.     CloseLibrary((struct Library *)ReqToolsBase);
  120.     CloseLibrary((struct Library *)muBase);
  121.     CloseLibrary((struct Library *)DOSBase);
  122.  
  123.     return(rc);
  124. }    
  125.  
  126.  
  127. void __regargs myputs(char *str, struct DosLibrary *DOSBase)
  128. {
  129.     Write(Output(), str, strlen(str));
  130. }
  131.  
  132.  
  133. void __regargs mygets(char *str, struct DosLibrary *DOSBase)
  134. {
  135.     LONG len = 0;
  136.     char buf;
  137.     BOOL done = FALSE;
  138.     BPTR in, out;
  139.  
  140.     in = Input();
  141.     out = Output();
  142.     SetMode(in, 1);
  143.     do {
  144.         Read(in, &buf, 1);
  145.         switch(buf) {
  146.             case    '\b':
  147.                 if (len) {
  148.                     FPutC(out, '\b');
  149.                     Flush(out);
  150.                     len--;
  151.                 }
  152.                 break;
  153.     
  154.             case    '\n':
  155.             case    '\r':
  156.                 done = TRUE;
  157.                 break;
  158.     
  159.             default:
  160.                 if ((len < muPASSWORDSIZE) && ((buf & 0x7f) > 31)
  161.                      && (buf != 127)) {
  162.                     FPutC(out, ' ');
  163.                     str[len++] = buf;
  164.                 } else
  165.                     FPutC(out, 7);
  166.                 Flush(out);
  167.                 break;
  168.         }
  169.     } while (!done);
  170.     str[len] = 0;
  171.     SetMode(in, 0);
  172.     FPutC(out, '\r');
  173.     Flush(out);
  174. }
  175.