mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-04-06 15:00:40 +08:00
Full_Name: Norbert Klasen
Version: head OS: SuSE Linux 7.3 URL: ftp://ftp.openldap.org/incoming/norbert.klasen.rejects.20020605.patch Submission from: (NULL) (62.104.216.66) This patch adds an '-S' option to ldapmodify. If a filename is specified with this option, records which could not successfully be added/modified/deleted from the LDAP server will be written to the specified file. Most useful in conjunction with '-c' option.
This commit is contained in:
parent
2c7dae116b
commit
91088eaa84
@ -103,12 +103,14 @@ usage( const char *prog )
|
||||
" specified by \"-f file\".\n"
|
||||
"Add or modify options:\n"
|
||||
" -a add values (default%s)\n"
|
||||
" -c continuous operation mode (do not stop on errors)\n"
|
||||
" -f file read operations from `file'\n"
|
||||
" -F force all changes records to be used\n"
|
||||
" -S file write skipped modifications to `file'\n"
|
||||
|
||||
"Common options:\n"
|
||||
" -d level set LDAP debugging level to `level'\n"
|
||||
" -D binddn bind DN\n"
|
||||
" -f file read operations from `file'\n"
|
||||
" -h host LDAP server\n"
|
||||
" -H URI LDAP Uniform Resource Indentifier(s)\n"
|
||||
" -I use SASL Interactive mode\n"
|
||||
@ -138,10 +140,11 @@ usage( const char *prog )
|
||||
int
|
||||
main( int argc, char **argv )
|
||||
{
|
||||
char *infile, *rbuf, *start;
|
||||
FILE *fp;
|
||||
char *infile, *rejfile, *rbuf, *start, *rejbuf;
|
||||
FILE *fp, *rejfp;
|
||||
char *matched_msg = NULL, *error_msg = NULL;
|
||||
int rc, i, authmethod, version, want_bindpw, debug, manageDSAit, referrals;
|
||||
int count;
|
||||
int count, len;
|
||||
|
||||
if (( prog = strrchr( argv[ 0 ], *LDAP_DIRSEP )) == NULL ) {
|
||||
prog = argv[ 0 ];
|
||||
@ -156,12 +159,13 @@ main( int argc, char **argv )
|
||||
ldapadd = ( strncmp( prog, "ldapadd", sizeof("ldapadd")-1 ) == 0 );
|
||||
|
||||
infile = NULL;
|
||||
rejfile = NULL;
|
||||
not = verbose = want_bindpw = debug = manageDSAit = referrals = 0;
|
||||
authmethod = -1;
|
||||
version = -1;
|
||||
|
||||
while (( i = getopt( argc, argv, "acrf:F"
|
||||
"Cd:D:h:H:IkKMnO:p:P:QR:U:vw:WxX:Y:Z" )) != EOF )
|
||||
"Cd:D:h:H:IkKMnO:p:P:QR:S:U:vw:WxX:Y:Z" )) != EOF )
|
||||
{
|
||||
switch( i ) {
|
||||
/* Modify Options */
|
||||
@ -403,6 +407,13 @@ main( int argc, char **argv )
|
||||
return( EXIT_FAILURE );
|
||||
#endif
|
||||
break;
|
||||
case 'S': /* skipped modifications to file */
|
||||
if( rejfile != NULL ) {
|
||||
fprintf( stderr, "%s: -S previously specified\n", prog );
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
rejfile = strdup( optarg );
|
||||
break;
|
||||
case 'U':
|
||||
#ifdef HAVE_CYRUS_SASL
|
||||
if( sasl_authc_id != NULL ) {
|
||||
@ -539,6 +550,15 @@ main( int argc, char **argv )
|
||||
if ( argc != optind )
|
||||
usage( prog );
|
||||
|
||||
if ( rejfile != NULL ) {
|
||||
if (( rejfp = fopen( rejfile, "w" )) == NULL ) {
|
||||
perror( rejfile );
|
||||
return( EXIT_FAILURE );
|
||||
}
|
||||
} else {
|
||||
rejfp = NULL;
|
||||
}
|
||||
|
||||
if ( infile != NULL ) {
|
||||
if (( fp = fopen( infile, "r" )) == NULL ) {
|
||||
perror( infile );
|
||||
@ -671,6 +691,7 @@ main( int argc, char **argv )
|
||||
ldap_perror( ld, "ldap_bind" );
|
||||
return( EXIT_FAILURE );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -707,10 +728,33 @@ main( int argc, char **argv )
|
||||
|
||||
start = rbuf;
|
||||
|
||||
if ( rejfp ) {
|
||||
len = strlen( rbuf );
|
||||
if (( rejbuf = (char *)malloc( len+1 )) == NULL ) {
|
||||
perror( "realloc" );
|
||||
exit( EXIT_FAILURE );
|
||||
}
|
||||
memcpy( rejbuf, rbuf, len+1 );
|
||||
}
|
||||
|
||||
rc = process_ldif_rec( start, count );
|
||||
|
||||
if( rc )
|
||||
fprintf( stderr, "ldif_record() = %d\n", rc );
|
||||
if ( rc && rejfp ) {
|
||||
fprintf(rejfp, "# Error: %s (%d)", ldap_err2string(rc), rc);
|
||||
|
||||
ldap_get_option(ld, LDAP_OPT_MATCHED_DN, &matched_msg);
|
||||
if ( matched_msg != NULL && *matched_msg != '\0' ) {
|
||||
fprintf( rejfp, ", matched DN: %s", matched_msg );
|
||||
}
|
||||
|
||||
ldap_get_option(ld, LDAP_OPT_ERROR_STRING, &error_msg);
|
||||
if ( error_msg != NULL && *error_msg != '\0' ) {
|
||||
fprintf( rejfp, ", additional info: %s", error_msg );
|
||||
}
|
||||
fprintf( rejfp, "\n%s\n", rejbuf );
|
||||
}
|
||||
if (rejfp)
|
||||
free( rejbuf );
|
||||
free( rbuf );
|
||||
}
|
||||
|
||||
@ -718,6 +762,10 @@ main( int argc, char **argv )
|
||||
ldap_unbind( ld );
|
||||
}
|
||||
|
||||
if ( rejfp != NULL ) {
|
||||
fclose( rejfp );
|
||||
}
|
||||
|
||||
return( rc );
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
Tools ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
|
||||
ldapdelete *CDE *HI*K M*OPQR U*WXYZ cdef*h**k *n*p* vwx*
|
||||
ldapmodify *CDEF*HI*K M*OPQR U*WXYZabcdef*h**k *n*p*r t vwx*
|
||||
ldapmodify *CDEF*HI*K M*OPQRS U*WXYZabcdef*h**k *n*p*r t vwx*
|
||||
ldapmodrdn *CDE *HI*K M*OPQR U*WXYZ cdef*h**k *n*p*rs vwx*
|
||||
ldappasswd A*CDE *HI* *O QRS U*WXYZa de *h** * * * s vwx*
|
||||
ldapsearch A*CDE *HI*KLM*OPQRSTU*WXYZab*def*h**kl*n*p* stuvwx*z
|
||||
|
@ -11,6 +11,8 @@ ldapmodify, ldapadd \- LDAP modify entry and LDAP add entry tools
|
||||
[\c
|
||||
.BR \-c ]
|
||||
[\c
|
||||
.BI \-S \ file\fR]
|
||||
.[\c
|
||||
.BR \-C ]
|
||||
[\c
|
||||
.BR \-n ]
|
||||
@ -61,6 +63,8 @@ ldapmodify, ldapadd \- LDAP modify entry and LDAP add entry tools
|
||||
[\c
|
||||
.BR \-c ]
|
||||
[\c
|
||||
.BI \-S \ file\fR]
|
||||
[\c
|
||||
.BR \-C ]
|
||||
[\c
|
||||
.BR \-n ]
|
||||
@ -138,6 +142,11 @@ Continuous operation mode. Errors are reported, but
|
||||
will continue with modifications. The default is to exit after
|
||||
reporting an error.
|
||||
.TP
|
||||
.BI \-S \ file
|
||||
Add or change records which where skipped due to an error are written to \fIfile\fP
|
||||
and the error message returned by the server is added as a comment. Most useful in
|
||||
conjunction with -c.
|
||||
.TP
|
||||
.B \-n
|
||||
Show what would be done, but don't actually modify entries. Useful for
|
||||
debugging in conjunction with -v.
|
||||
|
Loading…
x
Reference in New Issue
Block a user