1 #ifndef LIBRARIES_MULTIUSER_H
    2 #define LIBRARIES_MULTIUSER_H
    3 
    4 /*
    5 	multiuser.library include
    6 
    7 	Copyright © 2002-2003 The MorphOS Development Team, All Rights Reserved.
    8 */
    9 
   10 #ifndef EXEC_TYPES_H
   11 # include <exec/types.h>
   12 #endif  /* EXEC_TYPES_H */
   13 
   14 #ifndef EXEC_LISTS_H
   15 # include <exec/lists.h>
   16 #endif  /* EXEC_LISTS_H */
   17 
   18 #ifndef EXEC_LIBRARIES_H
   19 # include <exec/libraries.h>
   20 #endif  /* EXEC_LIBRARIES_H */
   21 
   22 #ifndef EXEC_EXECBASE_H
   23 # include <exec/execbase.h>
   24 #endif  /* EXEC_EXECBASE_H */
   25 
   26 #ifndef EXEC_PORTS_H
   27 # include <exec/ports.h>
   28 #endif  /* EXEC_PORTS_H */
   29 
   30 #ifndef LIBRARIES_DOS_H
   31 # include <libraries/dos.h>
   32 #endif  /* LIBRARIES_DOS_H */
   33 
   34 #ifndef UTILITY_TAGITEM_H
   35 # include <utility/tagitem.h>
   36 #endif  /* UTILITY_TAGITEM_H */
   37 
   38 #ifndef LIBRARIES_LOCALE_H
   39 # include <libraries/locale.h>
   40 #endif /* LIBRARIES_LOCALE_H */
   41 
   42 #pragma pack(2)
   43 
   44 
   45 #define MULTIUSERNAME           "multiuser.library"
   46 #define MULTIUSERVERSION        39
   47 
   48 #define MULTIUSERCATALOGNAME    "multiuser.catalog"
   49 #define MULTIUSERCATALOGVERSION 1
   50 
   51 
   52 #define muOWNER_NOBODY  0x00000000
   53 #define muOWNER_SYSTEM  0xffffffff
   54 
   55 #define muMASK_UID      0xffff0000
   56 #define muMASK_GID      0x0000ffff
   57 
   58 #define muROOT_UID      0xffff
   59 #define muROOT_GID      0xffff
   60 
   61 #define muNOBODY_UID    0x0000
   62 
   63 #define muUSERIDSIZE    32
   64 #define muGROUPIDSIZE   32
   65 #define muPASSWORDSIZE  32
   66 #define muUSERNAMESIZE  220
   67 #define muGROUPNAMESIZE 220
   68 #define muHOMEDIRSIZE   256
   69 #define muSHELLSIZE     256
   70 
   71 #define muPasswd_FileName     "passwd"
   72 #define muGroup_FileName      "MultiUser.group"
   73 #define muConfig_FileName     "MultiUser.config"
   74 #define muLog_FileName        "MultiUser.log"
   75 #define muLastLogin_FileName  ".lastlogin"
   76 #define muProfile_FileName    ".profile"
   77 #define muPlan_FileName       ".plan"
   78 #define muKey_FileName        ":.MultiUser.keyfile"
   79 #define muT_Input          (TAG_USER + 1)
   80 #define muT_Output         (TAG_USER + 2)
   81 #define muT_Graphical      (TAG_USER + 3)
   82 #define muT_PubScrName     (TAG_USER + 4)
   83 #define muT_Task           (TAG_USER + 5)
   84 #define muT_Own            (TAG_USER + 6)
   85 #define muT_Global         (TAG_USER + 7)
   86 #define muT_Quiet          (TAG_USER + 8)
   87 #define muT_UserID         (TAG_USER + 9)
   88 #define muT_Password       (TAG_USER + 10)
   89 #define muT_DefProtection  (TAG_USER + 11)
   90 #define muT_All            (TAG_USER + 12)
   91 #define muT_NoLog          (TAG_USER + 13)
   92 
   93 struct muUserInfo
   94 {
   95    char UserID[muUSERIDSIZE];
   96    UWORD uid;
   97    UWORD gid;
   98    char UserName[muUSERNAMESIZE];
   99    char HomeDir[muHOMEDIRSIZE];
  100    UWORD NumSecGroups;
  101    UWORD *SecGroups;
  102    char Shell[muSHELLSIZE];
  103 };
  104 
  105 struct muGroupInfo
  106 {
  107    char GroupID[muGROUPIDSIZE];
  108    UWORD gid;
  109    UWORD MgrUid;
  110    char GroupName[muGROUPNAMESIZE];
  111 };
  112 
  113 #define muKeyType_First          0
  114 #define muKeyType_Next           1
  115 #define muKeyType_gid            4
  116 
  117 #define muKeyType_UserID         2
  118 #define muKeyType_uid            3
  119 #define muKeyType_gidNext        5
  120 #define muKeyType_UserName       6
  121 #define muKeyType_WUserID        7
  122 #define muKeyType_WUserName      8
  123 #define muKeyType_WUserIDNext    9
  124 #define muKeyType_WUserNameNext  10
  125 
  126 #define muKeyType_GroupID        11
  127 #define muKeyType_WGroupID       12
  128 #define muKeyType_WGroupIDNext   13
  129 #define muKeyType_GroupName      14
  130 #define muKeyType_WGroupName     15
  131 #define muKeyType_WGroupNameNext 16
  132 #define muKeyType_MgrUid         17
  133 #define muKeyType_MgrUidNext     18
  134 
  135 struct muExtOwner
  136 {
  137    UWORD uid;
  138    UWORD gid;
  139    UWORD NumSecGroups;
  140 };
  141 
  142 #define muSecGroups(x) ((UWORD *)((UBYTE *)(x) + sizeof(struct muExtOwner)))
  143 #define muExtOwner2ULONG(x) ((ULONG)((x) ? (x)->uid << 16 | (x)->gid : muOWNER_NOBODY))
  144 
  145 
  146 #define muFIBB_SET_UID        31
  147 #define muFIBF_SET_UID        (1 << muFIBB_SET_UID)
  148 
  149 #define DEFPROTECTION (FIBF_OTR_READ | FIBF_GRP_READ)
  150 
  151 #define muRelB_ROOT_UID    0
  152 #define muRelB_ROOT_GID    1
  153 #define muRelB_NOBODY      2
  154 #define muRelB_UID_MATCH   3
  155 #define muRelB_GID_MATCH   4
  156 #define muRelB_PRIM_GID    5
  157 #define muRelB_NO_OWNER    6
  158 
  159 #define muRelF_ROOT_UID    (1 << muRelB_ROOT_UID)
  160 #define muRelF_ROOT_GID    (1 << muRelB_ROOT_GID)
  161 #define muRelF_NOBODY      (1 << muRelB_NOBODY)
  162 #define muRelF_UID_MATCH   (1 << muRelB_UID_MATCH)
  163 #define muRelF_GID_MATCH   (1 << muRelB_GID_MATCH)
  164 #define muRelF_PRIM_GID    (1 << muRelB_PRIM_GID)
  165 #define muRelF_NO_OWNER    (1 << muRelB_NO_OWNER)
  166 
  167 struct muMonitor
  168 {
  169    struct MinNode Node;
  170    ULONG Mode;
  171    ULONG Triggers;
  172    union
  173    {
  174       struct
  175       {
  176          struct Task *Task;
  177          ULONG SignalNum;
  178       } Signal;
  179 
  180       struct
  181       {
  182          struct MsgPort *Port;
  183       } Message;
  184 
  185    } muMonitor_sendunion;
  186 };
  187 
  188 #define muMon_IGNORE       0
  189 #define muMon_SEND_SIGNAL  1
  190 #define muMon_SEND_MESSAGE 2
  191 
  192 struct muMonMsg
  193 {
  194    struct Message ExecMsg;
  195    struct muMonitor *Monitor;
  196    ULONG Trigger;
  197    UWORD From;
  198    UWORD To;
  199    char UserID[muUSERIDSIZE];
  200 };
  201 
  202 #define muTrgB_OwnerChange       0
  203 #define muTrgB_Login             1
  204 #define muTrgB_LoginFail         2
  205 #define muTrgB_Passwd            3
  206 #define muTrgB_PasswdFail        4
  207 #define muTrgB_CheckPasswd       5
  208 #define muTrgB_CheckPasswdFail   6
  209 
  210 #define muTrgF_OwnerChange       (1 << muTrgB_OwnerChange)
  211 #define muTrgF_Login             (1 << muTrgB_Login)
  212 #define muTrgF_LoginFail         (1 << muTrgB_LoginFail)
  213 #define muTrgF_Passwd            (1 << muTrgB_Passwd)
  214 #define muTrgF_PasswdFail        (1 << muTrgB_PasswdFail)
  215 #define muTrgF_CheckPasswd       (1 << muTrgB_CheckPasswd)
  216 #define muTrgF_CheckPasswdFail   (1 << muTrgB_CheckPasswdFail)
  217 
  218 
  219 #pragma pack()
  220 
  221 #endif /* LIBRARIES_MULTIUSER_H */