home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / dev / tbsource.lha / TBSource / Logger / PassWd.S < prev    next >
Text File  |  1993-12-21  |  22KB  |  1,245 lines

  1. *************************************************
  2. *                        *
  3. *        (C)opyright 1992-93        *
  4. *                        *
  5. *         by Tomi Blinnikka        *
  6. *                        *
  7. *    Don´t try to understand the code    *
  8. *                        *
  9. * Version 1.00    01/08/1992            *
  10. *                        *
  11. * BUGS:    Didn't check for UNUSED            *
  12. *                        *
  13. * Version 1.01    08/08/1992            *
  14. *                        *
  15. * Added -l option                *
  16. *                        *
  17. * BUGS:    RemUser    jumped to AddUser_OUT        *
  18. *                        *
  19. * Version 1.02    10/08/1992            *
  20. *                        *
  21. * Added -e option                *
  22. *                        *
  23. * Version 1.03    14/08/1992            *
  24. *                        *
  25. * Added command to start            *
  26. *                        *
  27. * Version 1.04    03/02/1993            *
  28. *                        *
  29. * Changed parser to CBM ReadArgs        *
  30. *                        *
  31. *************************************************
  32.  
  33.     INCLUDE    "JMPLibs.i"
  34.     INCLUDE    "exec/types.i"
  35.     INCLUDE    "libraries/dos.i"
  36.  
  37.     INCLUDE    "XREF:2.0.xref"
  38.     INCLUDE    "XREF:exec.xref"
  39.     INCLUDE    "XREF:dos.xref"
  40.  
  41.  
  42.     XREF    _LVOSetMode
  43.  
  44.     BITDEF  GV,LOCAL_ONLY,9
  45.  
  46. TRUE:        EQU    1
  47. FALSE:        EQU    0
  48.  
  49.         section    PassWd,CODE
  50.  
  51.         openlib    Dos,NoDos
  52.  
  53.         lib    Dos,Input
  54.         move.l    d0,_stdin
  55.  
  56.         lea.l    CLTemplate1,a0
  57.         move.l    a0,d1
  58.         lea.l    CLArray1,a0
  59.         move.l    a0,d2
  60.         clr.l    d3
  61.         lib    Dos,ReadArgs
  62.         move.l    d0,RDArgs1
  63.         beq    NoRDArgs
  64.  
  65.         move.l    UserPointer,a4
  66.         tst.b    (a4)
  67.         bne    CopyLoop
  68.  
  69.         lea.l    UserVarText1,a0
  70.         move.l    a0,d1
  71.         lea.l    Buffer3,a0
  72.         move.l    a0,d2
  73.         move.l    #10,d3
  74.         clr.l    d4            ;LV_VAR actually
  75.         or.l    #GVF_LOCAL_ONLY,d4
  76.         lib    Dos,GetVar
  77.         cmp.l    #-1,d0
  78.         beq    ArgMissing
  79.         bra    CopyLoop_OUT
  80.  
  81. CopyLoop:    lea.l    Buffer3,a0
  82.         move.l    a4,a5
  83.         add.l    #10,a5
  84. CopyLoop1:    move.b    (a4)+,(a0)+
  85.         tst.b    (a4)
  86.         beq    CopyLoop_OUT
  87.         cmp.l    a4,a5
  88.         beq    CopyLoop_OUT
  89.         cmp.b    #' ',(a4)
  90.         bne    CopyLoop1
  91. CopyLoop_OUT:
  92.  
  93.         lea.l    PassWdFileN,a0
  94.         move.l    a0,d1
  95.         move.l    #MODE_OLDFILE,d2
  96.         lib    Dos,Open
  97.         move.l    d0,PassWdFile
  98.         bne    DoCommands
  99.  
  100.         lib    Dos,IoErr
  101.         cmp.l    #ERROR_OBJECT_NOT_FOUND,d0
  102.         beq    CreatePWFile
  103.         bsr    FileError1
  104.         bra    ShutDown
  105.  
  106. CreatePWFile:    lea.l    CreatingText1,a0
  107.         bsr    Printer
  108.  
  109.         lea.l    PassWdFileN,a0
  110.         move.l    a0,d1
  111.         move.l    #MODE_NEWFILE,d2
  112.         lib    Dos,Open
  113.         move.l    d0,PassWdFile
  114.         bne    CreatePWFile2
  115.         bsr    FileError4
  116.         bra    ShutDown
  117. CreatePWFile2:    move.l    #'root',Buffer1
  118.         lea.l    Buffer1,a0
  119.         lea.l    PassWord,a1
  120.         bsr    Encrypt
  121.  
  122.         bsr    WriteUser
  123.         bsr    SeekStart
  124.  
  125. DoCommands:    tst.l    OptionAdd
  126.         beq    DoCommands1
  127.         bsr    AddUser
  128. DoCommands1:    tst.l    OptionRemove
  129.         beq    DoCommands2
  130.         bsr    RemUser
  131. DoCommands2:    tst.l    OptionList
  132.         beq    DoCommands3
  133.         bsr    ListUsers
  134. DoCommands3:    tst.l    OptionEdit
  135.         beq    DoCommands4
  136.         bsr    EditUser
  137. DoCommands4:    tst.w    SomethingDone
  138.         bne    DoCommands5
  139.         bsr    ChangePW
  140. DoCommands5:    bra    ShutDown
  141.  
  142. ChangePW:    bsr    FindUser
  143.         tst.l    d0
  144.         bne    ChangePW_OUT
  145.  
  146.         lea.l    UNUSEDText1,a0
  147.         lea.l    UserName,a1
  148.         bsr    CmpStrings
  149.         tst.l    d0
  150.         beq    ChangePW0.1
  151.         lea.l    InvalidText1,a0    
  152.         bsr    Printer
  153.         bra    ChangePW_OUT
  154.  
  155. ChangePW0.1:    lea.l    PasswordText3,a0
  156.         bsr    Printer
  157.         lea.l    Buffer1,a0
  158.         move.l    #10,d0
  159.         bsr    GetString2
  160.         cmp.l    #-1,d0
  161.         bne    ChangePW1
  162.         lea.l    BreakText1,a0
  163.         bsr    Printer
  164.         bra    ChangePW_OUT
  165. ChangePW1:    lea.l    PassWord,a0
  166.         lea.l    Buffer2,a1
  167.         bsr    Decrypt
  168.  
  169.         lea.l    Buffer1,a1
  170.         lea.l    Buffer2,a0
  171.         bsr    CmpStrings
  172.         tst.l    d0
  173.         bne    ChangePW2
  174.         lea.l    MismatchText2,a0
  175.         bsr    Printer
  176.         bra    ChangePW_OUT
  177. ChangePW2:    lea.l    CRLFText1,a0
  178.         bsr    Printer
  179.         bsr    GetPW
  180.         tst.l    d0
  181.         bne    ChangePW_OUT
  182.  
  183. ChangePW6:    lea.l    CRLFText1,a0
  184.         bsr    Printer
  185.  
  186.         lea.l    Buffer1,a0
  187.         lea.l    PassWord,a1
  188.         bsr    Encrypt
  189.  
  190.         bsr    SeekBack
  191.         bsr    WriteUser
  192.  
  193. ChangePW_OUT:    rts
  194.  
  195. AddUser:    move.w    #1,SomethingDone
  196.         bsr    CheckClone
  197.         tst.l    d0
  198.         bne    AddUser0.01
  199.         lea.l    DoubleNameText1,a0
  200.         bsr    Printer
  201.         bra    AddUser_OUT
  202.  
  203. AddUser0.01:    bsr    CheckRoot
  204.         tst.l    d0
  205.         bne    AddUser_OUT
  206.  
  207.         bsr    FindFree
  208.  
  209.         bsr    ClearUser
  210.         bsr    CopyUN1
  211.  
  212. AddUser0.1:    bsr    GetRealN
  213.         tst.l    d0
  214.         bne    AddUser_OUT
  215.  
  216. AddUser1.1:    lea.l    PasswordText1,a0
  217.         bsr    Printer
  218.  
  219.         lea.l    Buffer1,a0
  220.         move.l    #10,d0
  221.         bsr    GetString2
  222.         cmp.l    #-1,d0
  223.         bne    AddUser2
  224.         lea.l    BreakText1,a0
  225.         bsr    Printer
  226.         bra    AddUser_OUT
  227.  
  228. AddUser2:    cmp.l    #4,d0
  229.         bhi    AddUser2.1
  230.         lea.l    ShortText1,a0
  231.         bsr    Printer
  232.         bra    AddUser1.1
  233.  
  234. AddUser2.1:    lea.l    PasswordText2,a0
  235.         bsr    Printer
  236.  
  237.         lea.l    Buffer2,a0
  238.         move.l    #10,d0
  239.         bsr    GetString2
  240.         cmp.l    #-1,d0
  241.         bne    AddUser3
  242.         lea.l    BreakText1,a0
  243.         bsr    Printer
  244.         bra    AddUser_OUT
  245.  
  246. AddUser3:    lea.l    Buffer2,a0
  247.         lea.l    Buffer1,a1
  248.         bsr    CmpStrings
  249.         tst.l    d0
  250.         bne    AddUser4
  251.         lea.l    MismatchText1,a0
  252.         bsr    Printer
  253.         bra    AddUser1.1
  254.  
  255. AddUser4:    bsr    GetHome
  256.         tst.l    d0
  257.         bne    AddUser_OUT
  258.  
  259. AddUser5:    bsr    GetOffice
  260.         tst.l    d0
  261.         bne    AddUser_OUT
  262.  
  263. AddUser6:    bsr    GetCommand
  264.         tst.l    d0
  265.         bne    AddUser_OUT
  266.  
  267. AddUser7:    bsr    GiveUserInfo
  268.  
  269.         lea.l    AddUserText1,a0
  270.         bsr    Printer
  271.         bsr    GetAnswer
  272.         tst.l    d0
  273.         bne    AddUser_OUT
  274.  
  275.         lea.l    Buffer1,a0
  276.         lea.l    PassWord,a1
  277.         bsr    Encrypt
  278.  
  279.         bsr    WriteUser
  280. AddUser_OUT:    rts
  281.  
  282. RemUser:    move.w    #1,SomethingDone
  283.         bsr    CheckRoot
  284.         tst.l    d0
  285.         bne    RemUser_OUT
  286.         bsr    FindUser
  287.         tst.l    d0
  288.         bne    RemUser_OUT
  289.  
  290.         cmp.l    #'root',UserName
  291.         bne    RemUser1
  292.         lea.l    RemUserText2,a0
  293.         bsr    Printer
  294.         bra    RemUser_OUT
  295.  
  296. RemUser1:    bsr    GiveUserInfo
  297.  
  298.         lea.l    RemUserText1,a0
  299.         bsr    Printer
  300.  
  301.         bsr    GetAnswer
  302.         tst.l    d0
  303.         bne    RemUser_OUT
  304.  
  305.         bsr    SeekBack
  306.         bsr    ClearUser
  307.         move.l    #'UNUS',UserName
  308.         move.w    #'ED',UserName+4
  309.         bsr    WriteUser
  310.  
  311. RemUser_OUT:    rts
  312.  
  313. ListUsers:    move.w    #1,SomethingDone
  314.         lea.l    AllUsersText1,a0
  315.         bsr    Printer
  316.  
  317. ListUsers1:    clr.w    Quiet
  318.         bsr    ReadUser
  319.         tst.l    d0
  320.         bne    ListUsers_OUT
  321.  
  322.         move.w    #1,Quiet
  323.         lea.l    UNUSEDText1,a0
  324.         lea.l    UserName,a1
  325.         bsr    CmpStrings
  326.         tst.l    d0
  327.         bne    ListUsers1
  328.  
  329.         bsr    GiveUserInfo
  330.  
  331.         bsr    CheckBreak
  332.         tst.l    d0
  333.         beq    ListUsers1
  334.  
  335. ListUsers_OUT:    move.w    #1,Quiet
  336.         rts
  337.  
  338. EditUser:    move.w    #1,SomethingDone
  339.         bsr    CheckRoot
  340.         tst.l    d0
  341.         bne    EditUser_OUT
  342.         bsr    FindUser
  343.         tst.l    d0
  344.         bne    EditUser_OUT
  345.  
  346. EditUser0.1:    bsr    GiveUserInfo
  347.         bsr    GetOption
  348.         cmp.l    #-1,d0
  349.         beq    EditUser_OUT
  350.         tst.l    d0
  351.         beq    EditUser1
  352.         cmp.l    #1,d0
  353.         beq    EditUser2
  354.         cmp.l    #2,d0
  355.         beq    EditUser3
  356.         cmp.l    #3,d0
  357.         beq    EditUser4
  358.         cmp.l    #4,d0
  359.         beq    EditUser5
  360.         cmp.l    #5,d0
  361.         beq    EditUser6
  362.         cmp.l    #6,d0
  363.         beq    EditUser7
  364. EditUser_OUT    rts
  365. EditUser1:    bsr    GetUserN
  366.         tst.l    d0
  367.         bne    EditUser_OUT
  368.         bra    EditUser0.1
  369. EditUser2:    bsr    GetPW
  370.         tst.l    d0
  371.         bne    EditUser_OUT
  372.         lea.l    Buffer1,a0
  373.         lea.l    PassWord,a1
  374.         bsr    Encrypt
  375.         bra    EditUser0.1
  376. EditUser3:    bsr    GetRealN
  377.         tst.l    d0
  378.         bne    EditUser_OUT
  379.         bra    EditUser0.1
  380. EditUser4:    bsr    GetHome
  381.         tst.l    d0
  382.         bne    EditUser_OUT
  383.         bra    EditUser0.1
  384. EditUser5:    bsr    GetOffice
  385.         tst.l    d0
  386.         bne    EditUser_OUT
  387.         bra    EditUser0.1
  388. EditUser6:    bsr    SeekBack
  389.         bsr    WriteUser
  390.         bra    EditUser_OUT
  391. EditUser7:    bsr    GetCommand
  392.         tst.l    d0
  393.         bne    EditUser_OUT
  394.         bra    EditUser0.1
  395.  
  396. ShutDown:    move.l    PassWdFile,d1
  397.         beq    ShutDown9000
  398.         lib    Dos,Close
  399.  
  400. ShutDown9000:    move.l    RDArgs1,d1
  401.         beq    ShutDown8000
  402.         lib    Dos,FreeArgs
  403.  
  404. ShutDown8000:
  405. ShutDown1000:    closlib    Dos
  406.  
  407.         move.l    #RETURN_OK,d0
  408.         rts
  409.  
  410. ArgMissing:    move.l    #ERROR_REQUIRED_ARG_MISSING,d1
  411.         lib    Dos,SetIoErr
  412.         bra    NoRDArgs
  413.  
  414. NoRDArgs:    lib    Dos,IoErr
  415.         move.l    d0,d1
  416.         clr.l    d2
  417.         lib    Dos,PrintFault
  418.         bra    ShutDown
  419.  
  420. NoDos:        move.l    #RETURN_FAIL,d0
  421.         rts
  422.  
  423. FileError1:    lea.l    FileErrorText1,a0
  424.         bsr    Printer
  425.         rts
  426.  
  427. FileError2:    lea.l    FileErrorText2,a0
  428.         bsr    Printer
  429.         rts
  430.  
  431. FileError3:    lea.l    FileErrorText3,a0
  432.         bsr    Printer
  433.         bra    ShutDown
  434.  
  435. FileError4:    lea.l    FileErrorText4,a0
  436.         bsr    Printer
  437.         bra    ShutDown
  438.  
  439. Printer:    tst.w    Quiet
  440.         beq    Printer1
  441.         printa    a0
  442. Printer1:    rts
  443.  
  444. CheckRoot:    bsr    SeekStart
  445.         bsr    ReadUser
  446.         tst.l    d0
  447.         bne    CheckRoot_OUT
  448.         lea.l    PasswordText1,a0
  449.         bsr    Printer
  450.         lea.l    Buffer1,a0
  451.         move.l    #10,d0
  452.         bsr    GetString2
  453.         cmp.l    #-1,d0
  454.         bne    CheckRoot1
  455.         lea.l    BreakText1,a0
  456.         bsr    Printer
  457.         bra    CheckRoot_OUT
  458. CheckRoot1:    lea.l    CRLFText1,a0
  459.         bsr    Printer
  460.         lea.l    PassWord,a0
  461.         lea.l    Buffer2,a1
  462.         bsr    Decrypt
  463.  
  464.         bsr    SeekStart
  465.  
  466.         lea.l    Buffer2,a0
  467.         lea.l    Buffer1,a1
  468.         bsr    CmpStrings
  469.         tst.l    d0
  470.         bne    CheckRoot2
  471.         lea.l    MismatchText2,a0
  472.         bsr    Printer
  473. CheckRoot_OUT:    move.l    #-1,d0
  474.         rts
  475. CheckRoot2:    clr.l    d0
  476.         rts
  477.  
  478. ;Seek to end of PassWdFile
  479. ;
  480. ;Results d0 = length
  481. ;
  482.  
  483. SeekEnd:    push    d2-d3
  484.         move.l    PassWdFile,d1
  485.         move.l    d1,d6
  486.         move.l    #00,d2
  487.         move.l    #01,d3
  488.         lib    Dos,Seek
  489.         move.l    d6,d1
  490.         lib    Dos,Seek
  491.         pull    d2-d3
  492.         rts
  493.  
  494. SeekStart:    push    d2-d3
  495.         move.l    PassWdFile,d1
  496.         move.l    #0,d2
  497.         move.l    #-1,d3
  498.         lib    Dos,Seek
  499.         pull    d2-d3
  500.         rts
  501.  
  502. SeekBack:    push    d2-d3
  503.         move.l    PassWdFile,d1
  504.         move.l    #-DataSize,d2
  505.         move.l    #0,d3
  506.         lib    Dos,Seek
  507.         pull    d2-d3
  508.         rts
  509.  
  510. CopyUN1:    move.l    Buffer3,UserName
  511.         move.l    Buffer3+4,UserName+4
  512.         move.l    Buffer3+8,UserName+8
  513.         rts
  514.  
  515. ClearUser:    clr.l    UserN