[C/ldap/linux] ldap_modify lijkt niet te werken.

Pagina: 1
Acties:

  • elTigro
  • Registratie: November 2000
  • Laatst online: 20-02 06:15

elTigro

Es un Gringo!

Topicstarter
Op een linux machine waar ldap en samba op draait moet samba nadat ie een LMpassword en NTpassword heeft veranderd een programma aanroepen dat in ldap het Userpassword attribuut van een bepaalde dn ( is dan een user ) verandert. Ik kan dit wel met een simpel shell-scriptje dat ldapmodify aanroept doen, maar ik wil het liever door een (in C geschreven) programma laten doen.
In de huidige situatie gebruiken we de shell-script variant omdat ik mijn programma niet aan de praat krijg, en eigenlijk werkt dit best goed, maar ik kan het gewoon niet hebben dat mijn programma niet doet wat ik graag wil. Vandaar dat ik eens anderen ernaar wil laten kijken.
Concreet dus: weet iemand hoe je correct in C een attribuut van een bepaalde dn kunt veranderen?

Ik heb een setje variabelen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int auth_method = LDAP_AUTH_SIMPLE;
int desired_version = LDAP_VERSION3;
char *ldap_host = "ldapmachine.bij-mij.nl";
char *change_dn = "uid=admin,dc=bij-mij,dc=nl";
char *dn_passwd = "nunietmeergeheimlijktme";

char *user_dn = "uid=jantje,ou=Users,dc=bij-mij,dc=nl";
char *waarde[] = {"nieuwewachtwoord",NULL};

LDAPMod passwoord;
LDAPMod *mods[2];

passwoord.mod_op = LDAP_MOD_REPLACE;
passwoord.mod_type = "userpassword";
passwoord.mod_values = waarde;

mods[1] = &passwoord;
mods[2] = NULL;

Na het verkrijgen van een handle, en het binden
probeer ik dan dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
  }
/* nu ga ik proberen iets te modden */
/* bink die ik ben */

if (ldap_modify_s(ld,user_dn,mods) != LDAP_SUCCESS) {
printf ("Oh oh, password not changed\n");
ldap_perror (ld, "ldap_modify_s");
return (1 );
} else {
printf ("Hee, Password has changed ");
ldap_perror (ld, "ldap_modify_s");
} /* if ldap_modify */


Het vreemde is nu dat dit stuk code wel connect naar de ldap server, en zelfs
een MOD wil doen, maar dat ie het attribuut niet verandert.
Wanneer ik bijvoorbeeld met phpldapadmin aan de slag ga, en als zelfde dn
probeer dezelfde jantje (uid=jantje,ou= enz...) te veranderen, lukt het wel.

Nu probeer ik een goed systeembeheerder te zijn, dus heb ik in een andere terminal een tail -f van /var/log/messsages lopen, en wat blijkt:
bij mijn doe-het-zelf progje, verschijnt in de logs:

conn=45 fd=15 ACCEPT from IP=10.10.10.10
conn=45 op=0 BIND dn="<rootdn>" method =128
conn=45 op=0 BIND dn="<rootdn>" mech= simple ssf=0
conn=45 op=0 RESULT tag=97 err=0 text=
conn=45 op=1 MOD dn="uid=jantje,ou=Users,dc=bij-mij,dc=nl"
conn=45 op=1 RESULT tag=103 err=0 text=
conn=45 op=2 UNBIND


en wanneer phpldapadmin het probeert:

conn=43 fd=15 ACCEPT from IP=10.10.10.10
conn=43 op=0 BIND dn="<rootdn>" method =128
conn=43 op=0 BIND dn="<rootdn>" mech= simple ssf=0
conn=43 op=0 RESULT tag=97 err=0 text=
conn=43 op=1 MOD dn="uid=jantje,ou=Users,dc=bij-mij,dc=nl"
conn=43 op=1 MOD attr=userpassword
conn=43 op=1 RESULT tag=103 err=0 text=
conn=43 op=2 UNBIND

het lijkt dus dat ik niet duidelijk genoeg opgeef dat ik attr=userpassword wil
veranderen. :? Kan iemand mij vertellen wat ik niet goed heb gedaan in mijn
doehetzelf code?

Ik ben overigens op de hoogte van het manko van het gebruik van Userpasswd in plaats van kerberos en ik weet ook dat het gebruik van de rootdn niet slim is in dit geval. Ik wil later een aparte passwd change only dn gaan maken die dan deze modify moet gaan uitvoeren.
/edit: spelfout

[ Voor 5% gewijzigd door elTigro op 08-04-2004 09:18 ]

Lazlo's Chinese Relativity Axiom:No matter how great your triumphs or how tragic your defeats --approximately one billion Chinese couldn't care less.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
C:
1
2
3
4
LDAPMod *mods[2];

mods[1] = &passwoord;
mods[2] = NULL;


Misschien daarom ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • elTigro
  • Registratie: November 2000
  • Laatst online: 20-02 06:15

elTigro

Es un Gringo!

Topicstarter
Eh, hoe bedoel je precies? Is dat niet goed?
(ik heb deze code trouwens gewoon van de netscape site die info geeft over ldap functies)

Lazlo's Chinese Relativity Axiom:No matter how great your triumphs or how tragic your defeats --approximately one billion Chinese couldn't care less.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Een array met grootte 2 heeft de elementen 0 en 1 :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • elTigro
  • Registratie: November 2000
  • Laatst online: 20-02 06:15

elTigro

Es un Gringo!

Topicstarter
Ja, inderdaad. Hmm. Ik had dat gewoon uit dat voorbeeld geplukt en en was ervan uitgegaan dat het wel correct zou zijn.(waarom publiceert men het anders zo...)
Neem me niet kwalijk, dit had ik ook makkelijk zelf kunnen bedenken. Het nadeel is alleen dat als je er al zo'n tijd naar zit te kijken dan zie je daar makkelijk overheen. Ik nam eigenlijk aan dat er iets fundamenteels fout zou zijn, maar nu ik me dit realiseer snap ik ook waarom ik bij mijn eigen progje iedere keer dat MOD attr=userpassword mis :)
hehe, dit is zo suf... dat is niet eens GOT waardig :z

Lazlo's Chinese Relativity Axiom:No matter how great your triumphs or how tragic your defeats --approximately one billion Chinese couldn't care less.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
BK1 schreef op 08 april 2004 @ 11:50:
Neem me niet kwalijk, dit had ik ook makkelijk zelf kunnen bedenken. Het nadeel is alleen dat als je er al zo'n tijd naar zit te kijken dan zie je daar makkelijk overheen.
Ik denk dat we allemaal dat verschijnsel wel kennen :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1