mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-27 18:19:52 -05:00
(very) incomplete Digest-MD5 impl to Attic (until someone steps up
to the plate)
This commit is contained in:
parent
7573a81efe
commit
252ccfddbc
3 changed files with 4 additions and 386 deletions
|
|
@ -17,7 +17,7 @@ SRCS = bind.c open.c result.c error.c compare.c search.c \
|
|||
getdn.c getentry.c getattr.c getvalues.c addentry.c \
|
||||
request.c os-ip.c url.c \
|
||||
init.c options.c print.c string.c util-int.c schema.c \
|
||||
charray.c digest.c tls.c dn.c os-local.c dnssrv.c \
|
||||
charray.c tls.c dn.c os-local.c dnssrv.c \
|
||||
utf-8.c
|
||||
OBJS = bind.lo open.lo result.lo error.lo compare.lo search.lo \
|
||||
controls.lo messages.lo references.lo extended.lo \
|
||||
|
|
@ -27,7 +27,7 @@ OBJS = bind.lo open.lo result.lo error.lo compare.lo search.lo \
|
|||
getdn.lo getentry.lo getattr.lo getvalues.lo addentry.lo \
|
||||
request.lo os-ip.lo url.lo \
|
||||
init.lo options.lo print.lo string.lo util-int.lo schema.lo \
|
||||
charray.lo digest.lo tls.lo dn.lo os-local.lo dnssrv.lo \
|
||||
charray.lo tls.lo dn.lo os-local.lo dnssrv.lo \
|
||||
utf-8.lo
|
||||
|
||||
LDAP_INCDIR= ../../include
|
||||
|
|
|
|||
|
|
@ -1,382 +0,0 @@
|
|||
/* $OpenLDAP$ */
|
||||
/*
|
||||
* Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
|
||||
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
|
||||
*/
|
||||
/* digest.c:
|
||||
* DIGEST-MD5 routines
|
||||
*/
|
||||
|
||||
#include "portable.h"
|
||||
|
||||
#ifdef DIGEST_MD5
|
||||
|
||||
#include <ac/ctype.h>
|
||||
#include <ac/string.h>
|
||||
#include <ac/time.h>
|
||||
|
||||
#include "ldap-int.h"
|
||||
#include "ldap_pvt.h"
|
||||
|
||||
#define TK_NOENDQUOTE -2
|
||||
#define TK_OUTOFMEM -1
|
||||
|
||||
#define TK_EOS 0
|
||||
#define TK_UNEXPCHAR 1
|
||||
#define TK_BAREWORD 2
|
||||
#define TK_COMMA 3
|
||||
#define TK_EQUALS 4
|
||||
#define TK_QDSTRING 5
|
||||
|
||||
struct token {
|
||||
int type;
|
||||
char *sval;
|
||||
};
|
||||
|
||||
static int
|
||||
get_token(const char ** sp, char ** token_val)
|
||||
{
|
||||
int kind;
|
||||
const char * p;
|
||||
const char * q;
|
||||
char * res;
|
||||
|
||||
*token_val = NULL;
|
||||
|
||||
if( (**sp) != '\0' || iscntrl(**sp) || !isascii(**sp) ) {
|
||||
(*sp)++;
|
||||
return TK_UNEXPCHAR;
|
||||
}
|
||||
|
||||
switch (**sp) {
|
||||
case '\0':
|
||||
kind = TK_EOS;
|
||||
(*sp)++;
|
||||
break;
|
||||
|
||||
case ',':
|
||||
kind = TK_COMMA;
|
||||
(*sp)++;
|
||||
break;
|
||||
|
||||
case '=':
|
||||
kind = TK_EQUALS;
|
||||
(*sp)++;
|
||||
break;
|
||||
|
||||
case '\"':
|
||||
kind = TK_QDSTRING;
|
||||
(*sp)++;
|
||||
|
||||
for (p = *sp;
|
||||
**sp != '\"' && **sp != '\0' && isascii(**sp);
|
||||
(*sp)++ )
|
||||
{
|
||||
if(**sp == '\\') {
|
||||
(*sp)++;
|
||||
if( **sp == '\0' ) break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( **sp == '\"' ) {
|
||||
q = *sp;
|
||||
res = LDAP_MALLOC(q-p+1);
|
||||
if ( !res ) {
|
||||
kind = TK_OUTOFMEM;
|
||||
} else {
|
||||
strncpy(res,p,q-p);
|
||||
res[q-p] = '\0';
|
||||
*token_val = res;
|
||||
}
|
||||
(*sp)++;
|
||||
|
||||
} else {
|
||||
kind = TK_NOENDQUOTE;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
kind = TK_BAREWORD;
|
||||
p = *sp;
|
||||
while ( isascii(**sp) &&
|
||||
!iscntrl(**sp) &&
|
||||
!isspace(**sp) &&
|
||||
**sp != '(' &&
|
||||
**sp != ')' &&
|
||||
**sp != '<' &&
|
||||
**sp != '>' &&
|
||||
**sp != '@' &&
|
||||
**sp != ',' &&
|
||||
**sp != ';' &&
|
||||
**sp != ':' &&
|
||||
**sp != '\\'&&
|
||||
**sp != '\"'&&
|
||||
**sp != '/' &&
|
||||
**sp != '[' &&
|
||||
**sp != ']' &&
|
||||
**sp != '?' &&
|
||||
**sp != '=' &&
|
||||
**sp != '{' &&
|
||||
**sp != '}' &&
|
||||
**sp != '\0' )
|
||||
(*sp)++;
|
||||
q = *sp;
|
||||
res = LDAP_MALLOC(q-p+1);
|
||||
if ( !res ) {
|
||||
kind = TK_OUTOFMEM;
|
||||
} else {
|
||||
strncpy(res,p,q-p);
|
||||
res[q-p] = '\0';
|
||||
*token_val = res;
|
||||
}
|
||||
}
|
||||
|
||||
return kind;
|
||||
}
|
||||
|
||||
struct kv {
|
||||
char *key;
|
||||
char *value;
|
||||
};
|
||||
|
||||
static void kv_destory( struct kv **kv )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( kv == NULL ) return;
|
||||
|
||||
for( i=0; kv[i] != NULL; i++ ) {
|
||||
if( kv[i]->key != NULL ) {
|
||||
LDAP_FREE( kv[i]->key );
|
||||
}
|
||||
|
||||
if( kv[i]->value != NULL ) {
|
||||
LDAP_FREE( kv[i]->value );
|
||||
}
|
||||
|
||||
LDAP_FREE( kv[i] );
|
||||
}
|
||||
|
||||
LDAP_FREE( kv );
|
||||
}
|
||||
|
||||
static int kv_add( struct kv ***kvs, const struct kv *kv )
|
||||
{
|
||||
int n;
|
||||
struct kv **tmp_kvs;
|
||||
struct kv *tmp_kv;
|
||||
|
||||
assert( kvs != NULL );
|
||||
assert( kv != NULL );
|
||||
|
||||
tmp_kv = LDAP_MALLOC( sizeof(struct kv) );
|
||||
|
||||
if( tmp_kv == NULL ) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
*tmp_kv = *kv;
|
||||
|
||||
if( *kvs == NULL ) {
|
||||
tmp_kvs = LDAP_MALLOC( 2 * sizeof(struct kv *) );
|
||||
n = 0;
|
||||
|
||||
} else {
|
||||
for( n=0; (*kvs)[n] != NULL; n++ ) {
|
||||
/* EMPTY */ ;
|
||||
}
|
||||
|
||||
tmp_kvs = LDAP_REALLOC( kvs, (n+2) * sizeof(struct kv *) );
|
||||
}
|
||||
|
||||
if( tmp_kvs == NULL ) {
|
||||
LDAP_FREE( tmp_kv );
|
||||
return -1;
|
||||
}
|
||||
|
||||
*kvs = tmp_kvs;
|
||||
kvs[n] = tmp_kvs;
|
||||
kvs[n+1] = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define ST_ERROR -1
|
||||
#define ST_DONE 0
|
||||
#define ST_KEY 1
|
||||
#define ST_EQUALS 2
|
||||
#define ST_VALUE 3
|
||||
#define ST_SEP 4
|
||||
|
||||
static int
|
||||
parse_key_value(
|
||||
struct kv ***kvsp,
|
||||
const char *str )
|
||||
{
|
||||
int rc = 0;
|
||||
int kind, state;
|
||||
const char *ss = str;
|
||||
char *sval;
|
||||
|
||||
struct kv **kvs = NULL;
|
||||
struct kv kv;
|
||||
|
||||
assert( kvsp != NULL );
|
||||
assert( str != NULL );
|
||||
|
||||
kv.key = NULL;
|
||||
kv.value = NULL;
|
||||
|
||||
state = ST_KEY;
|
||||
|
||||
while( state > ST_DONE ) {
|
||||
kind = get_token( &ss, &sval );
|
||||
switch( kind ) {
|
||||
case TK_EOS:
|
||||
state = ( state == ST_SEP )
|
||||
? ST_DONE : ST_ERROR;
|
||||
break;
|
||||
|
||||
case TK_BAREWORD:
|
||||
if( state == ST_KEY ) {
|
||||
state = ST_EQUALS;
|
||||
|
||||
assert( kv.key == NULL );
|
||||
assert( kv.value == NULL );
|
||||
kv.key = sval;
|
||||
|
||||
} else if ( state == ST_VALUE ) {
|
||||
state = ST_SEP;
|
||||
|
||||
assert( kv.key != NULL );
|
||||
assert( kv.value == NULL );
|
||||
kv.value = sval;
|
||||
|
||||
} else {
|
||||
state = ST_ERROR;
|
||||
}
|
||||
break;
|
||||
|
||||
case TK_COMMA:
|
||||
state = ( state == ST_SEP )
|
||||
? ST_KEY : ST_ERROR;
|
||||
break;
|
||||
|
||||
case TK_EQUALS:
|
||||
state = ( state == ST_EQUALS )
|
||||
? ST_VALUE : ST_ERROR;
|
||||
break;
|
||||
|
||||
case TK_QDSTRING:
|
||||
if( state == ST_VALUE ) {
|
||||
state = ST_SEP;
|
||||
|
||||
assert( kv.key != NULL );
|
||||
assert( kv.value == NULL );
|
||||
kv.value = sval;
|
||||
|
||||
} else {
|
||||
state = ST_ERROR;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
state = ST_ERROR;
|
||||
}
|
||||
|
||||
if( state == ST_SEP ) {
|
||||
/* add kv to return */
|
||||
if( kv_add( &kvs, &kv ) != 0 ) {
|
||||
state = ST_ERROR;
|
||||
kind = TK_OUTOFMEM;
|
||||
|
||||
} else {
|
||||
kv.key = NULL;
|
||||
kv.value = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( state == ST_ERROR ) {
|
||||
if( kv.key != NULL ) LDAP_FREE(kv.key);
|
||||
if( kv.value != NULL ) LDAP_FREE( kv.value );
|
||||
|
||||
kv_destory( kvs );
|
||||
kvs = NULL;
|
||||
|
||||
rc = ( kind == TK_OUTOFMEM ) ? -1 : 1 ;
|
||||
}
|
||||
|
||||
*kvsp = kvs;
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int
|
||||
parse_value_list(
|
||||
char ***valuesp,
|
||||
const char* str )
|
||||
{
|
||||
int rc = 0;
|
||||
char **values = NULL;
|
||||
|
||||
int kind, state;
|
||||
const char *ss = str;
|
||||
char *sval;
|
||||
|
||||
assert( valuesp != NULL );
|
||||
assert( str != NULL );
|
||||
|
||||
state = ST_VALUE;
|
||||
|
||||
while( state > ST_DONE ) {
|
||||
kind = get_token( &ss, &sval );
|
||||
switch( kind ) {
|
||||
case TK_EOS:
|
||||
state = ( state == ST_SEP )
|
||||
? ST_DONE : ST_ERROR;
|
||||
break;
|
||||
|
||||
case TK_BAREWORD:
|
||||
if( state == ST_VALUE ) {
|
||||
state = ST_SEP;
|
||||
|
||||
} else {
|
||||
state = ST_ERROR;
|
||||
}
|
||||
break;
|
||||
|
||||
case TK_COMMA:
|
||||
state = ( state == ST_SEP )
|
||||
? ST_VALUE : ST_ERROR;
|
||||
break;
|
||||
|
||||
default:
|
||||
state = ST_ERROR;
|
||||
}
|
||||
|
||||
if( state == ST_SEP ) {
|
||||
if( ldap_charray_add( &values, sval ) != 0 ) {
|
||||
state = ST_ERROR;
|
||||
kind = TK_OUTOFMEM;
|
||||
}
|
||||
|
||||
LDAP_FREE( sval );
|
||||
sval = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if( state == ST_ERROR ) {
|
||||
if( sval != NULL ) LDAP_FREE( sval );
|
||||
|
||||
LDAP_VFREE( values );
|
||||
values = NULL;
|
||||
|
||||
rc = ( kind == TK_OUTOFMEM ) ? -1 : 1 ;
|
||||
}
|
||||
|
||||
*valuesp = values;
|
||||
return rc;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -18,7 +18,7 @@ XXSRCS = apitest.c test.c tmpltest.c extended.c \
|
|||
getdn.c getentry.c getattr.c getvalues.c addentry.c \
|
||||
request.c os-ip.c url.c \
|
||||
init.c options.c print.c string.c util-int.c schema.c \
|
||||
charray.c digest.c tls.c dn.c os-local.c dnssrv.c \
|
||||
charray.c tls.c dn.c os-local.c dnssrv.c \
|
||||
utf-8.c
|
||||
SRCS = thr_posix.c thr_cthreads.c thr_thr.c thr_lwp.c thr_nt.c \
|
||||
thr_pth.c thr_sleep.c thr_stub.c rdwr.c
|
||||
|
|
@ -32,7 +32,7 @@ OBJS = extended.lo \
|
|||
init.lo options.lo print.lo string.lo util-int.lo schema.lo \
|
||||
thr_posix.lo thr_cthreads.lo thr_thr.lo thr_lwp.lo thr_nt.lo \
|
||||
thr_pth.lo thr_sleep.lo thr_stub.lo rdwr.lo \
|
||||
charray.lo digest.lo tls.lo dn.lo os-local.lo dnssrv.lo \
|
||||
charray.lo tls.lo dn.lo os-local.lo dnssrv.lo \
|
||||
utf-8.lo
|
||||
|
||||
LDAP_INCDIR= ../../include
|
||||
|
|
|
|||
Loading…
Reference in a new issue