PDA

View Full Version : User ändern mit Hilfe von System-API



Bonkel
20-10-08, 10:39
Hallo Leute!

Ich habe in meinen Programm einen CL Aufruf drin:

CALLB 'OWUSER400C'
PARM USER
PARM PWD
PARM PRFHNDL1
PARM PRFHNDL2
PARM wkSTEUERC

Dort gebe ich den User und das Passwort mit von dem User, desen Identität ich gerne möchte.

Das aufrufende CL-Programm habe ich hier im Forum gefunden und etwas angepasst, es sieht nun so aus:

PGM (&USERID &PWD &PRFHNDL1 &PRFHNDL2 &STEUERC)

DCL VAR(&STEUERC) TYPE(*CHAR) LEN(02)
DCL VAR(&USERID) TYPE(*CHAR) LEN(10)
DCL VAR(&PWD) TYPE(*CHAR) LEN(10)
DCL VAR(&PWDLEN) TYPE(*CHAR) LEN(4) +
VALUE( X'00000010')
DCL VAR(&PWDCCSID) TYPE(*CHAR) LEN(4) +
VALUE( X'FFFFFFFF')
DCL VAR(&ERRCODE) TYPE(*CHAR) LEN(8) +
VALUE( X'0000000000000000')
DCL VAR(&CURPWD) TYPE(*CHAR) LEN(10) +
VALUE(' ')
DCL VAR(&OPERATION) TYPE(*CHAR) LEN(4) +
VALUE( X'00000001')
DCL VAR(&ERROR) TYPE(*CHAR) LEN(315) +
VALUE(' ')
DCL VAR(&PRFHNDL1) TYPE(*CHAR) LEN(12)
DCL VAR(&PRFHNDL2) TYPE(*CHAR) LEN(12)
IF COND(&STEUERC *EQ '01') THEN(DO)
CALL PGM(QSYGETPH) PARM('*CURRENT ' +
&CURPWD &PRFHNDL1)

CALL PGM(QSYGETPH) PARM(&USERID &PWD &PRFHNDL2 +
&ERRCODE &PWDLEN &PWDCCSID)
CALL PGM(QWTSETP) PARM(&PRFHNDL2)

CALL PGM(QWTSJUID) PARM(&OPERATION &ERROR)
ENDDO

IF COND(&STEUERC *EQ '02') THEN(DO)
CALL PGM(QWTSETP) PARM(&PRFHNDL1)
CALL PGM(QSYRLSPH) PARM(&PRFHNDL1)
CALL PGM(QSYRLSPH) PARM(&PRFHNDL2)
ENDDO
ENDPGM

Nur nach dem CL-Aufruf ist der User nicht verändert wenn er in das Programm zurückkehrt, welches das CL aufruft.

Hat einer von euch eine Ahnung wieso?

Fuerchau
20-10-08, 10:59
Nach setzen des Profils läuft der Job unter der Berechtigung des neuen Profils.
Der Jobname ändert sich dadurch nicht.
Du kannst also nicht direkt abfragen, unter welchem User der Job läuft (also Jobattribut).

Hier hilft nur ggf. ein SQL mit der Abfrage auf Current User.

Bonkel
20-10-08, 11:16
Danke schonmal für deine Hilfe!

Kannst du mir vielleicht noch mit dem SQL ein wenig weiterhelfen?
Welche Datei muss ich abfragen, bzw. wo ist der Current User zu finden?

Fuerchau
20-10-08, 11:51
"Current User" ist eine Systemvariable und kann einfach per

D MyUser S 10
exec sql set : MyUser = Current User;

abgefragt werden.

Allerdings müsstest du den aktuellen User doch kennen, da du das Profil doch verwendest.

Bonkel
20-10-08, 12:51
Also ich schildere mal genau mein Problem von vorne:

Wir führen in unserer Firma den Webservice ein, dort gibts allerdings nur einen User, den Standarduser.

Nun soll aber jeder User Änderungen durchführen können, aber nicht unter dem Standarduser sondern mit seinen normalen regulären iSeries User!
Dazu sollte er sein Passwort und Userkennung eingeben und wir wollen das Standard(web)user - Profil mit dem anderen "tauschen" um eine eindeutige Identifikation durchzuführen!

Fuerchau
20-10-08, 13:25
Ob das der richtige Weg ist ?
Immerhin wüden dann User und Kennwort ja im Klartext übers Netz gehen.
Je nach Anzahl der erwarteten User benötigst du ja auch eine Vielzahl von Profilen.

Wenn du allerdings die DB connectest bevor du das Profil änderst, erhältst du immer den verbundenen User.

Was verstehst du unter WebService ?
Eine HTTP-Anwendung, 5250-Webfacing o.ä. ?

Bonkel
20-10-08, 13:41
Unter WebService verstehe ich folgendes:

IBM Web Administration for i5/OS

Wir erstellen eine Java-Software in dem verschiedene Änderungen, die bisher nur am Grünschirm möglich waren, nun auch über eine Web-Oberfläche möglich sind.

Alle User gibt es bereits auf der iSeries, es kommen keine zusätzlichen dazu.

Das Problem ist nur, dass man sich als Standard-User im WebService, sprich der Java Oberfläche anmeldet und dann gewisse Daten (z.B. eine Adresse) ändert, zu Dokumentationszwecken muss hier aber unbedingt das richtige Userprofil abgefragt werden. Dazu wollen wir halt das neben den zu ändernden Daten (z.B. Adresse) auch die iSeries User-ID und das dazugehörige Passwort eingeben wird.

Danach wird via RPG geprüft (Java übergibt alle Daten an das RPG-Programm) ob die Daten korrekt, bzw. der User das richtige Passwort mitgegeben hat.

Das ist nötig, weil alle Programme (in unseren Fall das Adressdatenprogramm) bereits im RPG vorliegen und bisher ja immer via Grünschirm geändert worden, dort wurde der aktuelle User ja ohne Probleme mitdokumentiert.

BenderD
20-10-08, 14:05
QWTSETP switched nur die Jobberechtigung und den SQL Benutzer um, mit rtvjoba und Konsorten bekommst du immer noch den vorherigen Benutzer angezeigt. SQL kennt im register current_user den gesetzten und in der Programmstatus Datenstruktur sollte der ebenfalls drinsein (nicht der bei der Jobnummer!!!)

D*B

PS:
falls deine WebServices allerdings wirklich WebServices sind, dann sollte man schon nochmal genauer draufsehen, ob man sich da von der Berechtigungsseite Löcher reinreißt.


Unter WebService verstehe ich folgendes:

IBM Web Administration for i5/OS

Wir erstellen eine Java-Software in dem verschiedene Änderungen, die bisher nur am Grünschirm möglich waren, nun auch über eine Web-Oberfläche möglich sind.

Alle User gibt es bereits auf der iSeries, es kommen keine zusätzlichen dazu.

Das Problem ist nur, dass man sich als Standard-User im WebService, sprich der Java Oberfläche anmeldet und dann gewisse Daten (z.B. eine Adresse) ändert, zu Dokumentationszwecken muss hier aber unbedingt das richtige Userprofil abgefragt werden. Dazu wollen wir halt das neben den zu ändernden Daten (z.B. Adresse) auch die iSeries User-ID und das dazugehörige Passwort eingeben wird.

Danach wird via RPG geprüft (Java übergibt alle Daten an das RPG-Programm) ob die Daten korrekt, bzw. der User das richtige Passwort mitgegeben hat.

Das ist nötig, weil alle Programme (in unseren Fall das Adressdatenprogramm) bereits im RPG vorliegen und bisher ja immer via Grünschirm geändert worden, dort wurde der aktuelle User ja ohne Probleme mitdokumentiert.