📄 pgpldap.c
字号:
PGPValidatePtr( num );
for( i = 0; IsntNull( values[i] ); i++ )
; /* NULL */
*num = i;
return kPGPError_NoErr;
}
PGPError
PGPldapCountValuesLen(
PGPldapContextRef pgpLDAP,
PGPberValue ** values,
PGPSize * num )
{
PGPSize i = 0;
PGPValidateLDAPContextRef( pgpLDAP );
PGPValidatePtr( values );
PGPValidatePtr( num );
for( i = 0; IsntNull( values[i] ); i++ )
; /* NULL */
*num = i;
return kPGPError_NoErr;
}
PGPError
PGPldapModify(
PGPldapContextRef pgpLDAP,
char * dn,
PGPldapMod * mod[],
PGPldapMessageID * messageID )
{
PGPError err = kPGPError_NoErr;
PGPberElementRef ber = kInvalidPGPberElementRef;
PGPUInt32 i = 0;
PGPValidateLDAPContextRef( pgpLDAP );
PGPValidatePtr( mod );
PGPValidatePtr( messageID );
if( IsNull( dn ) )
dn = (char *) "";
err = pgpNewBERElement( pgpLDAP->memMgr, &ber ); CKERR;
err = PGPberAppend( ber, "{it{s{",
++( pgpLDAP->nextMessageID ),
kPGPldapRequest_Modify,
dn ); CKERR;
for( i = 0; mod[i] != NULL; i++ )
{
err = PGPberAppend( ber, "{e",
mod[i]->op & ~kPGPldapModOpMask_UseBERValues ); CKERR;
if( mod[i]->op & kPGPldapModOpMask_UseBERValues )
{
err = PGPberAppend( ber, "{s[V]}}",
mod[i]->type,
mod[i]->bvalue ); CKERR;
}
else
{
err = PGPberAppend( ber, "{s[v]}}",
mod[i]->type,
mod[i]->value ); CKERR;
}
}
err = PGPberAppend( ber, "}}}" ); CKERR;
err = pgpLDAPSend( pgpLDAP, ber ); CKERR;
*messageID = pgpLDAP->nextMessageID;
error:
if( PGPberElementRefIsValid( ber ) )
(void) PGPFreeBERElement( ber );
return err;
}
PGPError
PGPldapModifySync(
PGPldapContextRef pgpLDAP,
char * dn,
PGPldapMod * mod[] )
{
PGPError err = kPGPError_NoErr;
PGPldapMessageID messageID = kInvalidPGPldapMessageID;
PGPldapType messageType = kPGPldapType_None;
PGPldapMessageRef resultMessage = kInvalidPGPldapMessageRef;
PGPValidateLDAPContextRef( pgpLDAP );
PGPValidatePtr( mod );
err = PGPldapModify( pgpLDAP, dn, mod, &messageID ); CKERR;
err = PGPNewLDAPMessage( pgpLDAP, &resultMessage ); CKERR;
err = PGPldapGetResult( pgpLDAP, messageID, FALSE, NULL, resultMessage,
&messageType ); CKERR;
error:
if( PGPldapMessageRefIsValid( resultMessage ) )
(void) PGPFreeLDAPMessage( resultMessage );
return( err ? err : PGPldapResultToError( pgpLDAP, pgpLDAP->result ) );
}
PGPError
PGPldapAdd(
PGPldapContextRef pgpLDAP,
char * dn,
PGPldapMod * mod[],
PGPldapMessageID * messageID )
{
PGPError err = kPGPError_NoErr;
PGPberElementRef ber = kInvalidPGPberElementRef;
PGPUInt32 i = 0;
PGPValidateLDAPContextRef( pgpLDAP );
PGPValidatePtr( mod );
PGPValidatePtr( messageID );
if( IsNull( dn ) )
dn = (char *) "";
err = pgpNewBERElement( pgpLDAP->memMgr, &ber ); CKERR;
err = PGPberAppend( ber, "{it{s{",
++( pgpLDAP->nextMessageID ),
kPGPldapRequest_Add,
dn ); CKERR;
for( i = 0; mod[i] != NULL; i++ )
{
if( mod[i]->op & kPGPldapModOpMask_UseBERValues )
{
err = PGPberAppend( ber, "{s[V]}",
mod[i]->type,
mod[i]->bvalue ); CKERR;
}
else
{
err = PGPberAppend( ber, "{s[v]}",
mod[i]->type,
mod[i]->value ); CKERR;
}
}
err = PGPberAppend( ber, "}}}" ); CKERR;
err = pgpLDAPSend( pgpLDAP, ber ); CKERR;
*messageID = pgpLDAP->nextMessageID;
error:
if( PGPberElementRefIsValid( ber ) )
(void) PGPFreeBERElement( ber );
return err;
}
PGPError
PGPldapAddSync(
PGPldapContextRef pgpLDAP,
char * dn,
PGPldapMod * mod[] )
{
PGPError err = kPGPError_NoErr;
PGPldapMessageID messageID = kInvalidPGPldapMessageID;
PGPldapType messageType = kPGPldapType_None;
PGPldapMessageRef resultMessage = kInvalidPGPldapMessageRef;
PGPValidateLDAPContextRef( pgpLDAP );
PGPValidatePtr( mod );
err = PGPldapAdd( pgpLDAP, dn, mod, &messageID ); CKERR;
err = PGPNewLDAPMessage( pgpLDAP, &resultMessage ); CKERR;
err = PGPldapGetResult( pgpLDAP, messageID, FALSE, NULL, resultMessage,
&messageType ); CKERR;
error:
if( PGPldapMessageRefIsValid( resultMessage ) )
(void) PGPFreeLDAPMessage( resultMessage );
return( err ? err : PGPldapResultToError( pgpLDAP, pgpLDAP->result ) );
}
PGPError
PGPldapDelete(
PGPldapContextRef pgpLDAP,
char * dn,
PGPldapMessageID * messageID )
{
PGPError err = kPGPError_NoErr;
PGPberElementRef ber = kInvalidPGPberElementRef;
PGPValidatePtr( messageID );
PGPValidatePtr( dn );
err = pgpNewBERElement( pgpLDAP->memMgr, &ber ); CKERR;
err = PGPberAppend( ber, "{its}",
++( pgpLDAP->nextMessageID ),
kPGPldapRequest_Delete,
dn ); CKERR;
err = pgpLDAPSend( pgpLDAP, ber ); CKERR;
*messageID = pgpLDAP->nextMessageID;
error:
if( PGPberElementRefIsValid( ber ) )
(void) PGPFreeBERElement( ber );
return err;
}
PGPError
PGPldapDeleteSync(
PGPldapContextRef pgpLDAP,
char * dn )
{
PGPError err = kPGPError_NoErr;
PGPldapMessageID messageID = kInvalidPGPldapMessageID;
PGPldapType messageType = kPGPldapType_None;
PGPldapMessageRef resultMessage = kInvalidPGPldapMessageRef;
PGPValidateLDAPContextRef( pgpLDAP );
err = PGPldapDelete( pgpLDAP, dn, &messageID ); CKERR;
err = PGPNewLDAPMessage( pgpLDAP, &resultMessage ); CKERR;
err = PGPldapGetResult( pgpLDAP, messageID, FALSE, NULL, resultMessage,
&messageType ); CKERR;
error:
if( PGPldapMessageRefIsValid( resultMessage ) )
(void) PGPFreeLDAPMessage( resultMessage );
return( err ? err : PGPldapResultToError( pgpLDAP, pgpLDAP->result ) );
}
PGPError
PGPldapModifyRDN(
PGPldapContextRef pgpLDAP,
char * dn,
char * newRDN,
PGPBoolean deleteOldRDN,
PGPldapMessageID * messageID )
{
PGPError err = kPGPError_NoErr;
PGPberElementRef ber = kInvalidPGPberElementRef;
PGPValidateLDAPContextRef( pgpLDAP );
PGPValidatePtr( dn );
PGPValidatePtr( newRDN );
PGPValidatePtr( messageID );
err = pgpNewBERElement( pgpLDAP->memMgr, &ber ); CKERR
err = PGPberAppend( ber, "{it{ssb}}",
++( pgpLDAP->nextMessageID ),
kPGPldapRequest_ModifyRDN,
dn,
newRDN,
deleteOldRDN ); CKERR;
err = pgpLDAPSend( pgpLDAP, ber ); CKERR;
*messageID = pgpLDAP->nextMessageID;
error:
if( PGPberElementRefIsValid( ber ) )
(void) PGPFreeBERElement( ber );
return err;
}
PGPError
PGPldapModifyRDNSync(
PGPldapContextRef pgpLDAP,
char * dn,
char * newRDN,
PGPBoolean deleteOldRDN )
{
PGPError err = kPGPError_NoErr;
PGPldapMessageID messageID = kInvalidPGPldapMessageID;
PGPldapType messageType = kPGPldapType_None;
PGPldapMessageRef resultMessage = kInvalidPGPldapMessageRef;
PGPValidateLDAPContextRef( pgpLDAP );
PGPValidatePtr( dn );
PGPValidatePtr( newRDN );
err = PGPldapModifyRDN( pgpLDAP, dn, newRDN, deleteOldRDN, &messageID ); CKERR;
err = PGPNewLDAPMessage( pgpLDAP, &resultMessage ); CKERR;
err = PGPldapGetResult( pgpLDAP, messageID, FALSE, NULL, resultMessage,
&messageType ); CKERR;
error:
if( PGPldapMessageRefIsValid( resultMessage ) )
(void) PGPFreeLDAPMessage( resultMessage );
return( err ? err : PGPldapResultToError( pgpLDAP, pgpLDAP->result ) );
}
PGPError
PGPldapCompare(
PGPldapContextRef pgpLDAP,
char * dn,
char * type,
char * value,
PGPldapMessageID * messageID )
{
PGPError err = kPGPError_NoErr;
PGPberElementRef ber = kInvalidPGPberElementRef;
PGPValidateLDAPContextRef( pgpLDAP );
PGPValidatePtr( dn );
PGPValidatePtr( type );
PGPValidatePtr( value );
PGPValidatePtr( messageID );
err = pgpNewBERElement( pgpLDAP->memMgr, &ber ); CKERR;
err = PGPberAppend( ber, "{it{s{ss}}}",
++( pgpLDAP->nextMessageID ),
kPGPldapRequest_Compare,
dn,
type,
value ); CKERR;
err = pgpLDAPSend( pgpLDAP, ber ); CKERR;
*messageID = pgpLDAP->nextMessageID;
error:
if( PGPberElementRefIsValid( ber ) )
(void) PGPFreeBERElement( ber );
return err;
}
PGPError
PGPldapCompareSync(
PGPldapContextRef pgpLDAP,
char * dn,
char * type,
char * value,
PGPBoolean * equal )
{
PGPError err = kPGPError_NoErr;
PGPldapMessageID messageID = kInvalidPGPldapMessageID;
PGPldapType messageType = kPGPldapType_None;
PGPldapMessageRef resultMessage = kInvalidPGPldapMessageRef;
PGPValidateLDAPContextRef( pgpLDAP );
PGPValidateLDAPContextRef( pgpLDAP );
err = PGPldapCompare( pgpLDAP, dn, type, value, &messageID ); CKERR;
err = PGPNewLDAPMessage( pgpLDAP, &resultMessage ); CKERR;
err = PGPldapGetResult( pgpLDAP, messageID, FALSE, NULL, resultMessage,
&messageType ); CKERR;
err = PGPldapGetCompareResult( pgpLDAP, messageID, equal ); CKERR;
error:
if( PGPldapMessageRefIsValid( resultMessage ) )
(void) PGPFreeLDAPMessage( resultMessage );
return( err ? err : PGPldapResultToError( pgpLDAP, pgpLDAP->result ) );
}
PGPError
PGPldapGetCompareResult(
PGPldapContextRef pgpLDAP,
PGPldapMessageID messageID,
PGPBoolean * equal )
{
PGPError err = kPGPError_NoErr;
PGPldapType messageType = kPGPldapType_None;
PGPldapMessageRef resultMessage = kInvalidPGPldapMessageRef;
PGPValidateLDAPContextRef( pgpLDAP );
PGPValidatePtr( equal );
err = PGPNewLDAPMessage( pgpLDAP, &resultMessage ); CKERR;
err = PGPldapGetResult( pgpLDAP, messageID, FALSE, NULL, resultMessage,
&messageType ); CKERR;
err = PGPFreeLDAPMessage( resultMessage ); CKERR;
if( pgpLDAP->result == kPGPldapResult_CompareTrue )
*equal = TRUE;
else if( pgpLDAP->result == kPGPldapResult_CompareFalse )
*equal = FALSE;
else
{
err = PGPldapResultToError( pgpLDAP, pgpLDAP->result );
goto error;
}
error:
return err;
}
PGPError
PGPldapIsLDAPURL(
PGPldapContextRef pgpLDAP,
char * url,
PGPBoolean * isURL )
{
PGPError err = kPGPError_NoErr;
PGPSize len = 0;
char * s = NULL;
PGPValidateLDAPContextRef( pgpLDAP );
PGPValidatePtr( url );
PGPValidatePtr( isURL );
len = strlen( (char *)url );
s = url;
if( url[0] == '<' )
{
if( url[len-1] != '>' )
{
*isURL = FALSE;
goto done;
}
s++;
}
if( pgpCompareStringsIgnoreCaseN( s, "URL:", 4 ) == 0 )
s += 4;
if( ( pgpCompareStringsIgnoreCaseN( s, "ldap://", 7 ) == 0 ) ||
( pgpCompareStringsIgnoreCaseN( s, "ldaps://", 8 ) == 0 ) )
*isURL = TRUE;
else
*isURL = FALSE;
done:
return err;
}
PGPError
PGPldapURLParse(
PGPldapContextRef pgpLDAP,
char * url,
PGPldapURLDesc ** outLDAPDesc )
{
PGPError err = kPGPError_NoErr;
PGPUInt32 len = 0;
char * temp = NULL;
char * s = NULL;
char sPort[16];
PGPldapURLDesc * lud = NULL;
PGPUInt32 i = 0;
PGPUInt32 j = 0;
PGPUInt32 numAttrs = 0;
PGPValidateLDAPContextRef( pgpLDAP );
PGPValidatePtr( url );
PGPValidatePtr( outLDAPDesc );
/*
* LDAP URLs look like this:
* ldap://host:port/dn[?attributes[?scope[?filter]]]
* They can also look like:
* <ldapurl> and <URL:ldapurl>
*/
len = strlen( url );
if( url[0] == '<' )
{
if( url[len-1] == '>' )
{
len -= 2;
temp = PGPNewData( pgpLDAP->memMgr, len + 1, kPGPMemoryMgrFlags_Clear );
CKNULL( temp );
pgpCopyMemory( url + 1, temp, len );
temp[len] = '\0';
}
else
{
err = kPGPError_BadParams;
goto error;
}
}
else
{
temp = PGPNewData( pgpLDAP->memMgr, len + 1, kPGPMemoryMgrFlags_Clear );
CKNULL( temp );
pgpCopyMemory( url, temp, len );
temp[len] = '\0';
}
s = temp;
if( pgpCompareStringsIgnoreCaseN( s, "URL:", 4 ) == 0 )
s += 4;
if( pgpCompareStringsIgnoreCaseN( s, "ldap://", 7 ) == 0 )
s += 7;
else if( pgpCompareStringsIgnoreCaseN( s, "ldaps://", 8 ) == 0)
s += 8;
else
{
err = kPGPError_LDAPNotLDAPURL;
goto error;
}
err = pgpNewLDAPURLDesc( pgpLDAP, &lud ); CKERR;
*outLDAPDesc = lud;
if( *s != '/' )
{
/* There is a host in this url */
for( i = 0; ( s[i] != ':' ) && ( s[i] != '/' ) && ( s[i] != '\0' ); i++ )
; /* NULL */
lud->host = PGPNewData( pgpLDAP->memMgr, i + 1, kPGPMemoryMgrFlags_Clear );
CKNULL( lud->host );
for( i = 0; ( s[i] != ':' ) && ( s[i] != '/' ) && ( s[i] != '\0' ); i++ )
lud->host[i] = s[i];
lud->host[i] = '\0';
/* Skip the host */
s += i;
}
if( s[0] =
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -