@ -902,34 +902,6 @@ int LDAPController::controlLDAPServer(sc_command command, uid_t userid, gid_t gr
return - 2 ;
return - 2 ;
}
}
// WARNING
// kadmin does not have a standard "waiting for user input" character or sequence
// To make matters worse, the colon does not uniquely designate the end of a line; for example the response "kadmin: ext openldap/foo.bar.baz: Principal does not exist"
// One way around this would be to see if the first colon is part of a "kadmin:" string; if so, then the colon is not a reliable end of line indicator for the current line
// (in fact only '\r' should be used as the end of line indicator in that case)
TQString readFullLineFromPtyProcess ( PtyProcess * proc ) {
TQString result = " " ;
while ( ( ! result . contains ( " \r " ) ) & &
( ! result . contains ( " > " ) ) & &
( ! ( ( ! result . contains ( " kadmin: " ) ) & & result . contains ( " : " ) ) ) & &
( ! ( ( result . contains ( " kadmin: " ) ) & & result . contains ( " \r " ) ) )
) {
result = result + TQString ( proc - > readLine ( false ) ) ;
tqApp - > processEvents ( ) ;
if ( ! TQFile : : exists ( TQString ( " /proc/%1/exe " ) . arg ( proc - > pid ( ) ) ) ) {
result . replace ( " \n " , " " ) ;
result . replace ( " \r " , " " ) ;
if ( result = = " " ) {
result = " TDE process terminated " ;
}
break ;
}
}
result . replace ( " \n " , " " ) ;
result . replace ( " \r " , " " ) ;
return result ;
}
int LDAPController : : initializeNewKerberosRealm ( TQString realmName , TQString * errstr ) {
int LDAPController : : initializeNewKerberosRealm ( TQString realmName , TQString * errstr ) {
TQCString command = " kadmin " ;
TQCString command = " kadmin " ;
QCStringList args ;
QCStringList args ;
@ -939,51 +911,58 @@ int LDAPController::initializeNewKerberosRealm(TQString realmName, TQString *err
PtyProcess kadminProc ;
PtyProcess kadminProc ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . exec ( command , args ) ;
kadminProc . exec ( command , args ) ;
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
if ( prompt = = " kadmin> " ) {
if ( prompt = = " kadmin> " ) {
command = TQCString ( " init " + realmName ) ;
command = TQCString ( " init " + realmName ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( command , true ) ;
kadminProc . writeLine ( command , true ) ;
do { // Discard our own input
do { // Discard our own input
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
} while ( prompt = = TQString ( command ) ) ;
} while ( prompt = = TQString ( command ) ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
if ( prompt . contains ( " authentication failed " ) ) {
if ( prompt . contains ( " authentication failed " ) ) {
if ( errstr ) * errstr = prompt ;
if ( errstr ) * errstr = LDAPManager : : detailedKAdminErrorMessage ( prompt ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 1 ;
return 1 ;
}
}
else if ( prompt . startsWith ( " Realm max " ) ) {
else if ( prompt . startsWith ( " Realm max " ) ) {
command = " unlimited " ;
command = " unlimited " ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( command , true ) ;
kadminProc . writeLine ( command , true ) ;
do { // Discard our own input
do { // Discard our own input
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
} while ( prompt = = TQString ( command ) ) ;
} while ( prompt = = TQString ( command ) ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
if ( prompt . startsWith ( " Realm max " ) ) {
if ( prompt . startsWith ( " Realm max " ) ) {
command = " unlimited " ;
command = " unlimited " ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( command , true ) ;
kadminProc . writeLine ( command , true ) ;
do { // Discard our own input
do { // Discard our own input
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
} while ( prompt = = TQString ( command ) ) ;
} while ( prompt = = TQString ( command ) ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
}
}
if ( prompt ! = " kadmin> " ) {
if ( prompt ! = " kadmin> " ) {
if ( errstr ) * errstr = prompt ;
if ( errstr ) * errstr = LDAPManager : : detailedKAdminErrorMessage ( prompt ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 1 ;
return 1 ;
}
}
// Success!
// Success!
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 0 ;
return 0 ;
}
}
// Failure
// Failure
if ( errstr ) * errstr = prompt ;
if ( errstr ) * errstr = LDAPManager : : detailedKAdminErrorMessage ( prompt ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 1 ;
return 1 ;
}
}
@ -1002,40 +981,45 @@ int LDAPController::addHostEntryToKerberosRealm(TQString kerberosHost, TQString
TQString prompt ;
TQString prompt ;
PtyProcess kadminProc ;
PtyProcess kadminProc ;
kadminProc . exec ( command , args ) ;
kadminProc . exec ( command , args ) ;
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
if ( prompt = = " kadmin> " ) {
if ( prompt = = " kadmin> " ) {
command = TQCString ( " ext " + hoststring ) ;
command = TQCString ( " ext " + hoststring ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( command , true ) ;
kadminProc . writeLine ( command , true ) ;
do { // Discard our own input
do { // Discard our own input
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
} while ( prompt = = TQString ( command ) ) ;
} while ( prompt = = TQString ( command ) ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
if ( prompt . contains ( " authentication failed " ) ) {
if ( prompt . contains ( " authentication failed " ) ) {
if ( errstr ) * errstr = prompt ;
if ( errstr ) * errstr = LDAPManager : : detailedKAdminErrorMessage ( prompt ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 1 ;
return 1 ;
}
}
else if ( prompt . endsWith ( " Principal does not exist " ) ) {
else if ( prompt . endsWith ( " Principal does not exist " ) ) {
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
if ( prompt ! = " kadmin> " ) {
if ( prompt ! = " kadmin> " ) {
if ( errstr ) * errstr = prompt ;
if ( errstr ) * errstr = LDAPManager : : detailedKAdminErrorMessage ( prompt ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 1 ;
return 1 ;
}
}
command = TQCString ( " ank --random-key " + hoststring ) ;
command = TQCString ( " ank --random-key " + hoststring ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( command , true ) ;
kadminProc . writeLine ( command , true ) ;
do { // Discard our own input
do { // Discard our own input
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
} while ( prompt = = TQString ( command ) ) ;
} while ( prompt = = TQString ( command ) ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
// Use all defaults
// Use all defaults
while ( prompt ! = " kadmin> " ) {
while ( prompt ! = " kadmin> " ) {
if ( prompt . contains ( " authentication failed " ) ) {
if ( prompt . contains ( " authentication failed " ) ) {
if ( errstr ) * errstr = prompt ;
if ( errstr ) * errstr = LDAPManager : : detailedKAdminErrorMessage ( prompt ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 1 ;
return 1 ;
}
}
@ -1049,39 +1033,45 @@ int LDAPController::addHostEntryToKerberosRealm(TQString kerberosHost, TQString
defaultParam = prompt . mid ( leftbracket , rightbracket - leftbracket ) ;
defaultParam = prompt . mid ( leftbracket , rightbracket - leftbracket ) ;
}
}
command = TQCString ( defaultParam ) ;
command = TQCString ( defaultParam ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( command , true ) ;
kadminProc . writeLine ( command , true ) ;
do { // Discard our own input
do { // Discard our own input
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
} while ( prompt = = TQString ( command ) ) ;
} while ( prompt = = TQString ( command ) ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
}
}
}
}
command = TQCString ( " ext " + hoststring ) ;
command = TQCString ( " ext " + hoststring ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( command , true ) ;
kadminProc . writeLine ( command , true ) ;
do { // Discard our own input
do { // Discard our own input
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
} while ( prompt = = TQString ( command ) ) ;
} while ( prompt = = TQString ( command ) ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
if ( prompt ! = " kadmin> " ) {
if ( prompt ! = " kadmin> " ) {
if ( errstr ) * errstr = prompt ;
if ( errstr ) * errstr = LDAPManager : : detailedKAdminErrorMessage ( prompt ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 1 ;
return 1 ;
}
}
// Success!
// Success!
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 0 ;
return 0 ;
}
}
else if ( prompt = = " kadmin> " ) {
else if ( prompt = = " kadmin> " ) {
// Success!
// Success!
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 0 ;
return 0 ;
}
}
// Failure
// Failure
if ( errstr ) * errstr = prompt ;
if ( errstr ) * errstr = LDAPManager : : detailedKAdminErrorMessage ( prompt ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 1 ;
return 1 ;
}
}
@ -1100,40 +1090,45 @@ int LDAPController::addLDAPEntryToKerberosRealm(TQString ldapProcessOwnerName, T
TQString prompt ;
TQString prompt ;
PtyProcess kadminProc ;
PtyProcess kadminProc ;
kadminProc . exec ( command , args ) ;
kadminProc . exec ( command , args ) ;
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
if ( prompt = = " kadmin> " ) {
if ( prompt = = " kadmin> " ) {
command = TQCString ( " ext --keytab= " + TQString ( LDAP_KEYTAB_FILE ) + " " + hoststring ) ;
command = TQCString ( " ext --keytab= " + TQString ( LDAP_KEYTAB_FILE ) + " " + hoststring ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( command , true ) ;
kadminProc . writeLine ( command , true ) ;
do { // Discard our own input
do { // Discard our own input
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
} while ( prompt . startsWith ( " ext --keytab= " ) ) ;
} while ( prompt . startsWith ( " ext --keytab= " ) ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
if ( prompt . contains ( " authentication failed " ) ) {
if ( prompt . contains ( " authentication failed " ) ) {
if ( errstr ) * errstr = prompt ;
if ( errstr ) * errstr = LDAPManager : : detailedKAdminErrorMessage ( prompt ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 1 ;
return 1 ;
}
}
else if ( prompt . endsWith ( " Principal does not exist " ) ) {
else if ( prompt . endsWith ( " Principal does not exist " ) ) {
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
if ( prompt ! = " kadmin> " ) {
if ( prompt ! = " kadmin> " ) {
if ( errstr ) * errstr = prompt ;
if ( errstr ) * errstr = LDAPManager : : detailedKAdminErrorMessage ( prompt ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 1 ;
return 1 ;
}
}
command = TQCString ( " ank --random-key " + hoststring ) ;
command = TQCString ( " ank --random-key " + hoststring ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( command , true ) ;
kadminProc . writeLine ( command , true ) ;
do { // Discard our own input
do { // Discard our own input
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
} while ( prompt = = TQString ( command ) ) ;
} while ( prompt = = TQString ( command ) ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
// Use all defaults
// Use all defaults
while ( prompt ! = " kadmin> " ) {
while ( prompt ! = " kadmin> " ) {
if ( prompt . contains ( " authentication failed " ) ) {
if ( prompt . contains ( " authentication failed " ) ) {
if ( errstr ) * errstr = prompt ;
if ( errstr ) * errstr = LDAPManager : : detailedKAdminErrorMessage ( prompt ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 1 ;
return 1 ;
}
}
@ -1147,39 +1142,45 @@ int LDAPController::addLDAPEntryToKerberosRealm(TQString ldapProcessOwnerName, T
defaultParam = prompt . mid ( leftbracket , rightbracket - leftbracket ) ;
defaultParam = prompt . mid ( leftbracket , rightbracket - leftbracket ) ;
}
}
command = TQCString ( defaultParam ) ;
command = TQCString ( defaultParam ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( command , true ) ;
kadminProc . writeLine ( command , true ) ;
do { // Discard our own input
do { // Discard our own input
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
} while ( prompt = = TQString ( command ) ) ;
} while ( prompt = = TQString ( command ) ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
}
}
}
}
command = TQCString ( " ext --keytab= " + TQString ( LDAP_KEYTAB_FILE ) + " " + hoststring ) ;
command = TQCString ( " ext --keytab= " + TQString ( LDAP_KEYTAB_FILE ) + " " + hoststring ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( command , true ) ;
kadminProc . writeLine ( command , true ) ;
do { // Discard our own input
do { // Discard our own input
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
} while ( prompt . startsWith ( " ext --keytab= " ) ) ;
} while ( prompt . startsWith ( " ext --keytab= " ) ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
if ( prompt ! = " kadmin> " ) {
if ( prompt ! = " kadmin> " ) {
if ( errstr ) * errstr = prompt ;
if ( errstr ) * errstr = LDAPManager : : detailedKAdminErrorMessage ( prompt ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 1 ;
return 1 ;
}
}
// Success!
// Success!
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 0 ;
return 0 ;
}
}
else if ( prompt = = " kadmin> " ) {
else if ( prompt = = " kadmin> " ) {
// Success!
// Success!
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 0 ;
return 0 ;
}
}
// Failure
// Failure
if ( errstr ) * errstr = prompt ;
if ( errstr ) * errstr = LDAPManager : : detailedKAdminErrorMessage ( prompt ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 1 ;
return 1 ;
}
}
@ -1200,54 +1201,62 @@ int LDAPController::setKerberosPasswordForUser(LDAPCredentials user, TQString *e
TQString prompt ;
TQString prompt ;
PtyProcess kadminProc ;
PtyProcess kadminProc ;
kadminProc . exec ( command , args ) ;
kadminProc . exec ( command , args ) ;
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
if ( prompt = = " kadmin> " ) {
if ( prompt = = " kadmin> " ) {
command = TQCString ( " passwd " + user . username ) ;
command = TQCString ( " passwd " + user . username ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( command , true ) ;
kadminProc . writeLine ( command , true ) ;
do { // Discard our own input
do { // Discard our own input
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
} while ( prompt = = TQString ( command ) ) ;
} while ( prompt = = TQString ( command ) ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
if ( prompt . contains ( " authentication failed " ) ) {
if ( prompt . contains ( " authentication failed " ) ) {
if ( errstr ) * errstr = prompt ;
if ( errstr ) * errstr = LDAPManager : : detailedKAdminErrorMessage ( prompt ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 1 ;
return 1 ;
}
}
else if ( ( prompt . endsWith ( " Password: " ) ) & & ( prompt . startsWith ( TQString ( user . username + " @ " ) ) ) ) {
else if ( ( prompt . endsWith ( " Password: " ) ) & & ( prompt . startsWith ( TQString ( user . username + " @ " ) ) ) ) {
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( user . password , true ) ;
kadminProc . writeLine ( user . password , true ) ;
do { // Discard our own input
do { // Discard our own input
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
} while ( prompt = = " " ) ;
} while ( prompt = = " " ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
if ( ( prompt . endsWith ( " Password: " ) ) & & ( prompt . startsWith ( " Verify " ) ) ) {
if ( ( prompt . endsWith ( " Password: " ) ) & & ( prompt . startsWith ( " Verify " ) ) ) {
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( user . password , true ) ;
kadminProc . writeLine ( user . password , true ) ;
do { // Discard our own input
do { // Discard our own input
prompt = readFullLineFromPtyProcess( & kadminProc ) ;
prompt = LDAPManager: : readFullLineFromPtyProcess( & kadminProc ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
printf ( " (kadmin) '%s' \n \r " , prompt . ascii ( ) ) ;
} while ( prompt = = " " ) ;
} while ( prompt = = " " ) ;
prompt = prompt . stripWhiteSpace ( ) ;
prompt = prompt . stripWhiteSpace ( ) ;
}
}
if ( prompt ! = " kadmin> " ) {
if ( prompt ! = " kadmin> " ) {
if ( errstr ) * errstr = prompt ;
if ( errstr ) * errstr = LDAPManager : : detailedKAdminErrorMessage ( prompt ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 1 ;
return 1 ;
}
}
// Success!
// Success!
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 0 ;
return 0 ;
}
}
else if ( prompt = = " kadmin> " ) {
else if ( prompt = = " kadmin> " ) {
// Success!
// Success!
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 0 ;
return 0 ;
}
}
// Failure
// Failure
if ( errstr ) * errstr = prompt ;
if ( errstr ) * errstr = LDAPManager : : detailedKAdminErrorMessage ( prompt ) ;
kadminProc . enableLocalEcho ( false ) ;
kadminProc . writeLine ( " quit " , true ) ;
kadminProc . writeLine ( " quit " , true ) ;
return 1 ;
return 1 ;
}
}