diff options
Diffstat (limited to 'driver/vms-getpwnam.c')
-rw-r--r-- | driver/vms-getpwnam.c | 129 |
1 files changed, 0 insertions, 129 deletions
diff --git a/driver/vms-getpwnam.c b/driver/vms-getpwnam.c deleted file mode 100644 index ec0650c..0000000 --- a/driver/vms-getpwnam.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - * getpwnam(name) - retrieves a UAF entry - * - * Author: Patrick L. Mahan - * Location: TGV, Inc - * Date: 15-Nov-1991 - * - * Purpose: Provides emulation for the UNIX getpwname routine. - * - * Modification History - * - * Date | Who | Version | Reason - * ------------+-----------+---------------+--------------------------- - * 15-Nov-1991 | PLM | 1.0 | First Write - */ - -#define PASSWDROUTINES - -#include <stdio.h> -#include <descrip.h> -#include <uaidef.h> -#include <string.h> -#include <stdlib.h> -#include <starlet.h> -#include "vms-pwd.h" - -struct uic { - unsigned short uid; - unsigned short gid; -}; - -#define TEST(ptr, str) { if (ptr == NULL) { \ - fprintf(stderr, "getpwnam: memory allocation failure for \"%s\"\n", \ - str); \ - return ((struct passwd *)(NULL)); \ - } } - -struct passwd *getpwnam(name) -char *name; -{ - int istatus; - int UserNameLen; - int UserOwnerLen; - int UserDeviceLen; - int UserDirLen; - static char UserName[13]; - static char UserOwner[32]; - static char UserDevice[32]; - static char UserDir[64]; - char *cptr, *sptr; - unsigned long int UserPwd[2]; - unsigned short int UserSalt; - unsigned long int UserEncrypt; - struct uic UicValue; - struct passwd *entry; - - struct dsc$descriptor_s VMSNAME = - {strlen(name), DSC$K_DTYPE_T, DSC$K_CLASS_S, name}; - - struct itmlist3 { - unsigned short int length; - unsigned short int item; - unsigned long int addr; - unsigned long int retaddr; - } ItemList[] = { - {12, UAI$_USERNAME, (unsigned long)&UserName, (unsigned long)&UserNameLen}, - {8, UAI$_PWD, (unsigned long)&UserPwd, 0}, - {4, UAI$_UIC, (unsigned long)&UicValue, 0}, - {32, UAI$_OWNER, (unsigned long)&UserOwner, (unsigned long)&UserOwnerLen}, - {32, UAI$_DEFDEV, (unsigned long)&UserDevice, (unsigned long)&UserDeviceLen}, - {64, UAI$_DEFDIR, (unsigned long)&UserDir, (unsigned long)&UserDirLen}, - {2, UAI$_SALT, (unsigned long)&UserSalt, 0}, - {4, UAI$_ENCRYPT, (unsigned long)&UserEncrypt, 0}, - {0, 0, 0, 0} - }; - - UserNameLen = 0; - istatus = sys$getuai (0, 0, &VMSNAME, &ItemList, 0, 0, 0); - - if (!(istatus & 1)) { - fprintf (stderr, "getpwnam: unable to retrieve passwd entry for %s\n", - name); - fprintf (stderr, "getpwnam: vms error number is 0x%x\n", istatus); - return ((struct passwd *)NULL); - } - - entry = (struct passwd *) calloc (1, sizeof(struct passwd)); - TEST(entry, "PASSWD_ENTRY"); - - entry->pw_uid = UicValue.uid; - entry->pw_gid = UicValue.gid; - entry->pw_salt = UserSalt; - entry->pw_encrypt = UserEncrypt; - - sptr = UserName; - cptr = calloc (UserNameLen+1, sizeof(char)); - TEST(cptr, "USERNAME"); - strncpy (cptr, sptr, UserNameLen); - cptr[UserNameLen] = '\0'; - entry->pw_name = cptr; - - cptr = calloc(8, sizeof(char)); - TEST(cptr, "PASSWORD"); - memcpy(cptr, UserPwd, 8); - entry->pw_passwd = cptr; - - sptr = UserOwner; sptr++; - cptr = calloc ((int)UserOwner[0]+1, sizeof(char)); - TEST(cptr, "FULLNAME"); - strncpy (cptr, sptr, (int)UserOwner[0]); - cptr[(int)UserOwner[0]] = '\0'; - entry->pw_gecos = cptr; - - cptr = calloc ((int)UserDevice[0]+(int)UserDir[0]+1, sizeof(char)); - TEST(cptr, "HOME"); - sptr = UserDevice; sptr++; - strncpy (cptr, sptr, (int)UserDevice[0]); - sptr = UserDir; sptr++; - strncat (cptr, sptr, (int)UserDir[0]); - cptr[(int)UserDevice[0]+(int)UserDir[0]] = '\0'; - entry->pw_dir = cptr; - - cptr = calloc (strlen("SYS$SYSTEM:LOGINOUT.EXE")+1, sizeof(char)); - TEST(cptr,"SHELL"); - strcpy (cptr, "SYS$SYSTEM:LOGINOUT.EXE"); - entry->pw_shell = cptr; - - return (entry); -} |