Path: utzoo!utgpu!water!watmath!clyde!att!ihnp4!ucbvax!CLVMS.CLARKSON.EDU!ABSTINE From: ABSTINE@CLVMS.CLARKSON.EDU (Art Stine - Network Engineer) Newsgroups: comp.os.vms Subject: re: setting username within an image Message-ID: <8805281746.AA10907@ucbvax.Berkeley.EDU> Date: 27 May 88 00:43:00 GMT Sender: daemon@ucbvax.BERKELEY.EDU Organization: The Internet Lines: 189 i have code which will do this. if you do get an rsh done, i'd really like a copy. it was on my list of things to add to the cmu tcp package as soon as i finish with the lpr code. here it is, along with another routine to set the uic: -------------------------------------------------------------------------------- .TITLE SYS_SET_USERNAME ; .IDENT /X01-001/ ; ; FACILITY: SYS - General procedure library ; ; ABSTRACT: Rewrite current process's USERNAME ; ; ENVIRONMENT: User mode, calls kernel mode routine, requires ; user privelege CMKRNL ; ; ; AUTHOR: Geoff Fitch ; CREATION DATE: 04-AUG-82 ; ;-- ;++ ; ; FUNCTIONAL DESCRIPTION: ; ; ; This routine is passed the address of a string descriptor ; pointing to the new username, it copies the string buffer ; to a local buffer and calls a kernel mode routine to write ; the new username in control space and the JIB. ; ; Calling routines must be linked with SYS$SYSTEM:SYS.STB ; ; CALLING SEQUENCE: (from DCL) ; ; ret_status.wlc.v = SYS_SET_USERNAME ( new_name.rt.dx ) ; ; FORMAL PARAMETERS: ; ; NEW_NAME String containing the new username ; ; IMPLICIT INPUTS: ; ; NONE ; ; IMPLICIT OUTPUTS: ; ; Process control space (CTL$T_USERNAME) ; Jb Info Block (JIB$T_USERNAME) ; ; COMPLETION STATUS: ; ; SS$_NORMAL Success ; SS$_NOPRIV You don't have CMKRNL ; something returned from LIB$SCOPY_DXDX ; ; SIDE EFFECTS: ; ; Process Username is changed ;-- ; .LIBRARY /SYS$LIBRARY:LIB.MLB/ $JIBDEF ; JIB symbols $PCBDEF .PSECT _SYS_CODE, PIC, USR, CON, REL, LCL, SHR, EXE, RD, NOWRT .ENTRY SYS_SET_USERNAME, ^M SUBL2 #12, SP ; allocate local string MOVAL (SP), -(SP) ; and create string descr PUSHL #12 PUSHAQ (SP) PUSHAQ @4(AP) ; copy username to local area CALLS #2, G^LIB$SCOPY_DXDX BLBC R0, 10$ ; return if copy failed ADDL #8, SP ; deallocate descriptor MOVAB (SP), R8 ; save buffer address $CMKRNL_S ROUTIN=WRITEUSER ; call kernel routine 10$: RET .ENTRY WRITEUSER, 0 MOVC3 #12, (R8), CTL$T_USERNAME ; write username in P1 space MOVL CTL$GL_PCB, R0 ; load address of pcb MOVL PCB$L_JIB(R0), R1 ; load address of jib MOVC3 #12, (R8), JIB$T_USERNAME(R1) ; write username into jib MOVL #1, R0 ; return with success RET .END -------------------------------------------------------------------------------- .TITLE SYS_SET_UIC ; .IDENT /X01-01/ ; ; FACILITY: SYS - General procedure Library ; ; ABSTRACT: Rewrite current process's UIC ; ; ENVIRONMENT: User mode, calls kernel mode routine, requires ; user privelege CMKRNL ; ; ; AUTHOR: DSA , ABS STINE ; CREATION DATE: 09-SEP-83 ; ;-- ;++ ; ; FUNCTIONAL DESCRIPTION: ; ; Sets process UIC to longword UIC passed from caller ; ; Note: Calling procedure must be linked with SYS$SYSTEM:SYS.STB ; ; CALLING SEQUENCE: (from high - level language) ; ; ret_status.wlc.v = SYS_SET_UIC ( new_uic.rl ) ; ; FORMAL PARAMETERS: ; ; NEW_UIC The longword containing the new UIC ; ; IMPLICIT INPUTS: ; ; NONE ; ; IMPLICIT OUTPUTS: ; ; Process Control Block (PCB$L_UIC) ; ; COMPLETION STATUS: ; ; SS$_NORMAL Success ; SS$_NOPRIV You don't have CMKRNL priv ; something returned from $CMKRNL ; ; SIDE EFFECTS: ; ; Process UIC is changed ; ;****************************************************************************** ; ; WARNING ******: DO NOT CHANGE THE FORMAT OF THE ADDRESSING IN THIS ROUTINE. ; WARNING ALMOST NO ERROR CHECKING IS, OR CAN BE DONE. THERE IS NO ; WARNING REAL WAY OF HANDLING AN EXCEPTION WHILE IN KERNEL MODE, ; AND HAVE IT COME BACK TO USER MODE. ; ; **** IN OTHER WORDS, YOU GOOF IT, YOU LOOSE IT. ***** ; ;****************************************************************************** ; ; integer*4 newuic, SYS_SET_UIC, ERROR ; DATA NEWUIC/ 65540 / ! SAME UIC AS [ 1,4 ] ; ; ERROR = SYS_SET_UIC( NEWUIC ) ; ; ;-- ; .LIBRARY /SYS$LIBRARY:LIB.MLB/ ; $SSDEF ; system return definitions $PCBDEF ; .PSECT CODE, PIC, USR, CON, REL, LCL, SHR, EXE, RD, NOWRT ; .ENTRY SYS_SET_UIC,^M ; save all reg ; MOVL @4(AP),R2 ; GRAB THE UIC AND STUFF INTO R2 ; $CMKRNL_S ROUTIN=SETUIC ; call kernel routine 10$: RET ; .ENTRY SETUIC,0 MOVL @#SCH$GL_CURPCB,R0 ; get current process PCB address MOVL R2 , PCB$L_UIC(R0) ; set user identification code MOVZWL #SS$_NORMAL,R0 ; SET A ONE IN R0 FOR NORMAL RETURN RET ; ; .END