f9c172ba3a
it up for multilib systems - install config files and init scripts using -p - pull in patch to build with current automake (#229010, Jacek Konieczny and Robert Scheck) - remove prereq on ldconfig: RPM should pick it up based on the -libs scriptlets - pull in patch to correctly detect gsskrb5_register_acceptor_identity (#200892, Mirko Streckenbach) - pull CVS fix for not tripping over extra commas in digest-md5 challenges (#229640) - drop patches which were needed to keep static builds going - remove static build, which is no longer a useful option because not all of our dependencies are available as static libraries - drop gssapi-generic patch due to lack of interest - update the bundled copy of db to 4.5.20 (#229012) - drop dbconverter-2, as we haven't bundled v1 libraries since FC4
98 lines
2.7 KiB
Diff
98 lines
2.7 KiB
Diff
"Speak" the saslauthd version 1 protocol if "saslauthd_version" is "1". I
|
|
don't think we'll be using this (the other way around was far more useful),
|
|
but here for the sake of completeness.
|
|
|
|
--- cyrus-sasl-2.1.17/lib/checkpw.c 2003-09-09 11:38:13.000000000 -0400
|
|
+++ cyrus-sasl-2.1.17/lib/checkpw.c 2004-01-20 16:57:52.000000000 -0500
|
|
@@ -454,7 +454,7 @@
|
|
sasl_getopt_t *getopt;
|
|
void *context;
|
|
char pwpath[sizeof(srvaddr.sun_path)];
|
|
- const char *p = NULL;
|
|
+ const char *p = NULL, *q = NULL;
|
|
char *freeme = NULL;
|
|
#ifdef USE_DOORS
|
|
door_arg_t arg;
|
|
@@ -463,6 +463,7 @@
|
|
/* check to see if the user configured a rundir */
|
|
if (_sasl_getcallback(conn, SASL_CB_GETOPT, &getopt, &context) == SASL_OK) {
|
|
getopt(context, NULL, "saslauthd_path", &p, NULL);
|
|
+ getopt(context, NULL, "saslauthd_version", &q, NULL);
|
|
}
|
|
if (p) {
|
|
strncpy(pwpath, p, sizeof(pwpath));
|
|
@@ -514,18 +515,22 @@
|
|
memcpy(query_end, &u_len, sizeof(unsigned short));
|
|
query_end += sizeof(unsigned short);
|
|
while (*userid) *query_end++ = *userid++;
|
|
+ userid -= ntohs(u_len);
|
|
|
|
memcpy(query_end, &p_len, sizeof(unsigned short));
|
|
query_end += sizeof(unsigned short);
|
|
while (*passwd) *query_end++ = *passwd++;
|
|
+ passwd -= ntohs(p_len);
|
|
|
|
memcpy(query_end, &s_len, sizeof(unsigned short));
|
|
query_end += sizeof(unsigned short);
|
|
while (*service) *query_end++ = *service++;
|
|
+ service -= ntohs(s_len);
|
|
|
|
memcpy(query_end, &r_len, sizeof(unsigned short));
|
|
query_end += sizeof(unsigned short);
|
|
if (user_realm) while (*user_realm) *query_end++ = *user_realm++;
|
|
+ user_realm -= ntohs(r_len);
|
|
}
|
|
|
|
#ifdef USE_DOORS
|
|
@@ -578,6 +583,50 @@
|
|
}
|
|
}
|
|
|
|
+ if (q && (*q == '1')) {
|
|
+ struct iovec iov[8];
|
|
+ unsigned int u_length, p_length;
|
|
+ char buffer[1024];
|
|
+
|
|
+ u_length = strlen(userid ? userid : "") + 1;
|
|
+ p_length = strlen(passwd ? passwd : "") + 1;
|
|
+ if (u_length + p_length >= sizeof(query)) {
|
|
+ close(s);
|
|
+ sasl_seterror(conn, 0, "out of memory");
|
|
+ goto fail;
|
|
+ }
|
|
+
|
|
+ memset(buffer, '\0', sizeof(buffer));
|
|
+ if (userid != NULL)
|
|
+ memcpy(buffer, userid, u_length);
|
|
+ if (passwd != NULL)
|
|
+ memcpy(buffer + u_length, passwd, p_length);
|
|
+
|
|
+ iov[0].iov_len = u_length + p_length;
|
|
+ iov[0].iov_base = buffer;
|
|
+
|
|
+ if (retry_writev(s, iov, 1) == -1) {
|
|
+ close(s);
|
|
+ sasl_seterror(conn, 0, "write failed");
|
|
+ goto fail;
|
|
+ }
|
|
+
|
|
+ if (retry_read(s, buffer, 2) != 2) {
|
|
+ close(s);
|
|
+ sasl_seterror(conn, 0, "read failed");
|
|
+ goto fail;
|
|
+ }
|
|
+
|
|
+ close(s);
|
|
+
|
|
+ if (strncmp(buffer, "OK", 2) == 0) {
|
|
+ return SASL_OK;
|
|
+ }
|
|
+
|
|
+ sasl_seterror(conn, SASL_NOLOG, "authentication failed");
|
|
+ return SASL_BADAUTH;
|
|
+ }
|
|
+
|
|
{
|
|
struct iovec iov[8];
|
|
|