From 5b8ec508a097798e42408f3bd03ce96985cfc90e Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Wed, 26 Jun 2013 10:21:55 -0500 Subject: [PATCH] Fix failure when long Kerberos commands are used This failure was due to an obscure ASCII sequence used in the output of kadmin --- admin | 2 +- src/libtdeldap.cpp | 25 +++++++++++++------------ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/admin b/admin index 65ecce4..307fab5 160000 --- a/admin +++ b/admin @@ -1 +1 @@ -Subproject commit 65ecce459d54e772303052de50d08557ba9cc7ed +Subproject commit 307fab5fdad542247fa11a418be0e9635f4b5ebf diff --git a/src/libtdeldap.cpp b/src/libtdeldap.cpp index 37ddea7..8209501 100644 --- a/src/libtdeldap.cpp +++ b/src/libtdeldap.cpp @@ -1017,6 +1017,7 @@ TQString LDAPManager::readFullLineFromPtyProcess(PtyProcess* proc) { } result.replace("\n", ""); result.replace("\r", ""); + result.replace("\x20\x08", ""); // Backspace + Space. This one caused all kinds of fun with long distinguished names and/or passwords! return result; } @@ -1061,7 +1062,7 @@ int LDAPManager::setPasswordForUser(LDAPUserInfo user, TQString *errstr) { do { // Discard our own input prompt = readFullLineFromPtyProcess(&kadminProc); printf("(kadmin) '%s'\n", prompt.ascii()); - } while (prompt == TQString(command)); + } while ((prompt == TQString(command)) || (prompt == "")); prompt = prompt.stripWhiteSpace(); if ((prompt.endsWith(" Password:")) && (prompt.startsWith(TQString(user.name + "@")))) { kadminProc.enableLocalEcho(false); @@ -1754,7 +1755,7 @@ int LDAPManager::addMachineInfo(LDAPMachineInfo machine, TQString *errstr) { do { // Discard our own input prompt = readFullLineFromPtyProcess(&kadminProc); printf("(kadmin) '%s'\n", prompt.ascii()); - } while (prompt == TQString(command)); + } while ((prompt == TQString(command)) || (prompt == "")); prompt = prompt.stripWhiteSpace(); // Use all defaults while (prompt != "kadmin>") { @@ -1805,7 +1806,7 @@ int LDAPManager::addMachineInfo(LDAPMachineInfo machine, TQString *errstr) { do { // Discard our own input prompt = readFullLineFromPtyProcess(&kadminProc); printf("(kadmin) '%s'\n", prompt.ascii()); - } while (prompt == TQString(command)); + } while ((prompt == TQString(command)) || (prompt == "")); prompt = prompt.stripWhiteSpace(); } } @@ -1874,7 +1875,7 @@ int LDAPManager::addServiceInfo(LDAPServiceInfo service, TQString *errstr) { do { // Discard our own input prompt = readFullLineFromPtyProcess(&kadminProc); printf("(kadmin) '%s'\n", prompt.ascii()); - } while (prompt == TQString(command)); + } while ((prompt == TQString(command)) || (prompt == "")); prompt = prompt.stripWhiteSpace(); // Use all defaults while (prompt != "kadmin>") { @@ -1925,7 +1926,7 @@ int LDAPManager::addServiceInfo(LDAPServiceInfo service, TQString *errstr) { do { // Discard our own input prompt = readFullLineFromPtyProcess(&kadminProc); printf("(kadmin) '%s'\n", prompt.ascii()); - } while (prompt == TQString(command)); + } while ((prompt == TQString(command)) || (prompt == "")); prompt = prompt.stripWhiteSpace(); } } @@ -2584,7 +2585,7 @@ int LDAPManager::exportKeytabForPrincipal(TQString principal, TQString fileName, do { // Discard our own input prompt = readFullLineFromPtyProcess(&kadminProc); printf("(kadmin) '%s'\n", prompt.ascii()); - } while (prompt == TQString(command)); + } while ((prompt == TQString(command)) || (prompt == "")); prompt = prompt.stripWhiteSpace(); // Use all defaults while (prompt != "kadmin>") { @@ -2635,7 +2636,7 @@ int LDAPManager::exportKeytabForPrincipal(TQString principal, TQString fileName, do { // Discard our own input prompt = readFullLineFromPtyProcess(&kadminProc); printf("(kadmin) '%s'\n", prompt.ascii()); - } while (prompt == TQString(command)); + } while ((prompt == TQString(command)) || (prompt == "")); prompt = prompt.stripWhiteSpace(); } } @@ -3535,7 +3536,7 @@ int LDAPManager::bondRealm(TQString adminUserName, const char * adminPassword, T do { // Discard our own input prompt = readFullLineFromPtyProcess(&kadminProc); printf("(kadmin) '%s'\n", prompt.ascii()); - } while (prompt == TQString(command)); + } while ((prompt == TQString(command)) || (prompt == "")); prompt = prompt.stripWhiteSpace(); if (prompt.endsWith(" Password:")) { kadminProc.writeLine(adminPassword, true); @@ -3560,7 +3561,7 @@ int LDAPManager::bondRealm(TQString adminUserName, const char * adminPassword, T do { // Discard our own input prompt = readFullLineFromPtyProcess(&kadminProc); printf("(kadmin) '%s'\n", prompt.ascii()); - } while (prompt == TQString(command)); + } while ((prompt == TQString(command)) || (prompt == "")); prompt = prompt.stripWhiteSpace(); // Use all defaults while (prompt != "kadmin>") { @@ -3591,7 +3592,7 @@ int LDAPManager::bondRealm(TQString adminUserName, const char * adminPassword, T do { // Discard our own input prompt = readFullLineFromPtyProcess(&kadminProc); printf("(kadmin) '%s'\n", prompt.ascii()); - } while (prompt == TQString(command)); + } while ((prompt == TQString(command)) || (prompt == "")); prompt = prompt.stripWhiteSpace(); } } @@ -3600,7 +3601,7 @@ int LDAPManager::bondRealm(TQString adminUserName, const char * adminPassword, T do { // Discard our own input prompt = readFullLineFromPtyProcess(&kadminProc); printf("(kadmin) '%s'\n", prompt.ascii()); - } while (prompt == TQString(command)); + } while ((prompt == TQString(command)) || (prompt == "")); prompt = prompt.stripWhiteSpace(); if (prompt != "kadmin>") { if (errstr) *errstr = prompt; @@ -3653,7 +3654,7 @@ int LDAPManager::unbondRealm(LDAPRealmConfig realmcfg, TQString adminUserName, c do { // Discard our own input prompt = readFullLineFromPtyProcess(&kadminProc); printf("(kadmin) '%s'\n", prompt.ascii()); - } while (prompt == TQString(command)); + } while ((prompt == TQString(command)) || (prompt == "")); prompt = prompt.stripWhiteSpace(); if (prompt.endsWith(" Password:")) { kadminProc.writeLine(adminPassword, true);