Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
O
OpenLDAP
Manage
Activity
Members
Labels
Plan
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Christopher Ng
OpenLDAP
Commits
50dbc7d0
Commit
50dbc7d0
authored
26 years ago
by
Dave Storey
Browse files
Options
Downloads
Patches
Plain Diff
Updated Kerberos code, added password prompting. <dave@tamos.net>
parent
d50231be
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
clients/tools/ldapsearch.c
+167
-144
167 additions, 144 deletions
clients/tools/ldapsearch.c
with
167 additions
and
144 deletions
clients/tools/ldapsearch.c
+
167
−
144
View file @
50dbc7d0
...
...
@@ -13,42 +13,43 @@
#define DEFSEP "="
static
void
usage
(
char
*
s
)
usage
(
char
*
s
)
{
fprintf
(
stderr
,
"usage: %s [options] filter [attributes...]
\n
where:
\n
"
,
s
);
fprintf
(
stderr
,
"
filter
\t
RFC-1558 compliant LDAP search filter
\n
"
);
fprintf
(
stderr
,
"
attributes
\t
whitespace-separated list of attributes to retrieve
\n
"
);
fprintf
(
stderr
,
" filter
\t
RFC-1558 compliant LDAP search filter
\n
"
);
fprintf
(
stderr
,
" attributes
\t
whitespace-separated list of attributes to retrieve
\n
"
);
fprintf
(
stderr
,
"
\t\t
(if no attribute list is given, all are retrieved)
\n
"
);
fprintf
(
stderr
,
"options:
\n
"
);
fprintf
(
stderr
,
"
-n
\t\t
show what would be done but don't actually search
\n
"
);
fprintf
(
stderr
,
"
-v
\t\t
run in verbose mode (diagnostics to standard output)
\n
"
);
fprintf
(
stderr
,
"
-t
\t\t
write values to files in /tmp
\n
"
);
fprintf
(
stderr
,
"
-u
\t\t
include User Friendly entry names in the output
\n
"
);
fprintf
(
stderr
,
"
-A
\t\t
retrieve attribute names only (no values)
\n
"
);
fprintf
(
stderr
,
"
-B
\t\t
do not suppress printing of non-ASCII values
\n
"
);
fprintf
(
stderr
,
"
-L
\t\t
print entries in LDIF format (-B is implied)
\n
"
);
fprintf
(
stderr
,
" -n
\t\t
show what would be done but don't actually search
\n
"
);
fprintf
(
stderr
,
" -v
\t\t
run in verbose mode (diagnostics to standard output)
\n
"
);
fprintf
(
stderr
,
" -t
\t\t
write values to files in /tmp
\n
"
);
fprintf
(
stderr
,
" -u
\t\t
include User Friendly entry names in the output
\n
"
);
fprintf
(
stderr
,
" -A
\t\t
retrieve attribute names only (no values)
\n
"
);
fprintf
(
stderr
,
" -B
\t\t
do not suppress printing of non-ASCII values
\n
"
);
fprintf
(
stderr
,
" -L
\t\t
print entries in LDIF format (-B is implied)
\n
"
);
#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
fprintf
(
stderr
,
"
-R
\t\t
do not automatically follow referrals
\n
"
);
fprintf
(
stderr
,
" -R
\t\t
do not automatically follow referrals
\n
"
);
#endif
/* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
fprintf
(
stderr
,
" -d level
\t
set LDAP debugging level to `level'
\n
"
);
fprintf
(
stderr
,
" -F sep
\t
print `sep' instead of `=' between attribute names and values
\n
"
);
fprintf
(
stderr
,
" -S attr
\t
sort the results by attribute `attr'
\n
"
);
fprintf
(
stderr
,
" -f file
\t
perform sequence of searches listed in `file'
\n
"
);
fprintf
(
stderr
,
" -b basedn
\t
base dn for search
\n
"
);
fprintf
(
stderr
,
" -s scope
\t
one of base, one, or sub (search scope)
\n
"
);
fprintf
(
stderr
,
" -a deref
\t
one of never, always, search, or find (alias dereferencing)
\n
"
);
fprintf
(
stderr
,
" -l time lim
\t
time limit (in seconds) for search
\n
"
);
fprintf
(
stderr
,
" -z size lim
\t
size limit (in entries) for search
\n
"
);
fprintf
(
stderr
,
" -D binddn
\t
bind dn
\n
"
);
fprintf
(
stderr
,
" -w passwd
\t
bind passwd (for simple authentication)
\n
"
);
fprintf
(
stderr
,
" -d level
\t
set LDAP debugging level to `level'
\n
"
);
fprintf
(
stderr
,
" -F sep
\t
print `sep' instead of `=' between attribute names and values
\n
"
);
fprintf
(
stderr
,
" -S attr
\t
sort the results by attribute `attr'
\n
"
);
fprintf
(
stderr
,
" -f file
\t
perform sequence of searches listed in `file'
\n
"
);
fprintf
(
stderr
,
" -b basedn
\t
base dn for search
\n
"
);
fprintf
(
stderr
,
" -s scope
\t
one of base, one, or sub (search scope)
\n
"
);
fprintf
(
stderr
,
" -a deref
\t
one of never, always, search, or find (alias dereferencing)
\n
"
);
fprintf
(
stderr
,
" -l time lim
\t
time limit (in seconds) for search
\n
"
);
fprintf
(
stderr
,
" -z size lim
\t
size limit (in entries) for search
\n
"
);
fprintf
(
stderr
,
" -D binddn
\t
bind dn
\n
"
);
fprintf
(
stderr
,
" -W
\t\t
prompt for bind passwd
\n
"
);
fprintf
(
stderr
,
" -w passwd
\t
bind passwd (for simple authentication)
\n
"
);
#ifdef HAVE_KERBEROS
fprintf
(
stderr
,
" -k
\t\t
use Kerberos instead of Simple Password authentication
\n
"
);
fprintf
(
stderr
,
" -k
\t\t
use Kerberos instead of Simple Password authentication
\n
"
);
fprintf
(
stderr
,
" -K
\t\t
use Kerberos step 1
\n
"
);
#endif
fprintf
(
stderr
,
"
-h host
\t
ldap server
\n
"
);
fprintf
(
stderr
,
"
-p port
\t
port on ldap server
\n
"
);
exit
(
1
);
fprintf
(
stderr
,
" -h host
\t
ldap server
\n
"
);
fprintf
(
stderr
,
" -p port
\t
port on ldap server
\n
"
);
exit
(
1
);
}
static
void
print_entry
LDAP_P
((
...
...
@@ -70,46 +71,71 @@ static int dosearch LDAP_P((
char
*
filtpatt
,
char
*
value
));
static
char
*
binddn
=
NULL
;
static
char
*
passwd
=
NULL
;
static
char
*
base
=
NULL
;
static
char
*
ldaphost
=
NULL
;
static
int
ldapport
=
0
;
static
char
*
sep
=
DEFSEP
;
static
char
*
sortattr
=
NULL
;
static
int
skipsortattr
=
0
;
static
int
verbose
,
not
,
includeufn
,
allow_binary
,
vals2tmp
,
ldif
;
static
char
*
sortattr
=
NULL
;
static
char
*
sep
=
DEFSEP
;
int
main
(
int
argc
,
char
**
argv
)
main
(
int
argc
,
char
**
argv
)
{
char
*
infile
,
*
filtpattern
,
**
attrs
,
line
[
BUFSIZ
];
FILE
*
fp
;
int
rc
,
i
,
first
,
scope
,
kerberos
,
deref
,
attrsonly
;
int
referrals
,
timelimit
,
sizelimit
,
authmethod
;
LDAP
*
ld
;
infile
=
NULL
;
deref
=
verbose
=
allow_binary
=
not
=
kerberos
=
vals2tmp
=
attrsonly
=
ldif
=
0
;
referrals
=
(
int
)
LDAP_OPT_ON
;
FILE
*
fp
=
NULL
;
LDAP
*
ld
=
NULL
;
char
*
infile
=
NULL
;
char
*
filtpattern
,
**
attrs
,
line
[
BUFSIZ
];
char
*
binddn
=
NULL
;
char
*
passwd
=
NULL
;
char
*
base
=
NULL
;
char
*
ldaphost
=
NULL
;
int
rc
,
i
,
first
,
deref
,
attrsonly
;
int
referrals
,
timelimit
,
sizelimit
,
want_passwd
;
int
authmethod
=
LDAP_AUTH_SIMPLE
;
int
scope
=
LDAP_SCOPE_SUBTREE
;
int
ldapport
=
LDAP_PORT
;
deref
=
verbose
=
allow_binary
=
not
=
vals2tmp
=
attrsonly
=
ldif
=
want_passwd
=
0
;
referrals
=
(
int
)
LDAP_OPT_ON
;
sizelimit
=
timelimit
=
0
;
scope
=
LDAP_SCOPE_SUBTREE
;
while
((
i
=
getopt
(
argc
,
argv
,
#ifdef HAVE_KERBEROS
"KknuvtRABLD:s:f:h:b:d:p:F:a:w:l:z:S:"
#else
"nuvtRABLD:s:f:h:b:d:p:F:a:w:l:z:S:"
#endif
))
!=
EOF
)
{
switch
(
i
)
{
case
'n'
:
/* do Not do any searches */
++
not
;
while
((
i
=
getopt
(
argc
,
argv
,
"Aa:Bb:D:d:h:f:F:KkLl:np:RS:s:tuvWw:z:"
))
!=
EOF
)
{
switch
(
i
)
{
case
'A'
:
/* retrieve attribute names only -- no values */
attrsonly
++
;
break
;
case
'v'
:
/* verbose mode */
++
verbose
;
case
'a'
:
/* set alias deref option */
if
(
strncasecmp
(
optarg
,
"never"
,
5
)
==
0
)
{
deref
=
LDAP_DEREF_NEVER
;
}
else
if
(
strncasecmp
(
optarg
,
"search"
,
5
)
==
0
)
{
deref
=
LDAP_DEREF_SEARCHING
;
}
else
if
(
strncasecmp
(
optarg
,
"find"
,
4
)
==
0
)
{
deref
=
LDAP_DEREF_FINDING
;
}
else
if
(
strncasecmp
(
optarg
,
"always"
,
6
)
==
0
)
{
deref
=
LDAP_DEREF_ALWAYS
;
}
else
{
fprintf
(
stderr
,
"alias deref should be never, search, find, or always
\n
"
);
usage
(
argv
[
0
]
);
}
break
;
case
'L'
:
/* print entries in LDIF format */
++
ldif
;
/* fall through -- always allow binary when outputting LDIF */
case
'B'
:
/* allow binary values to be printed */
++
allow_binary
;
break
;
case
'b'
:
/* searchbase */
base
=
strdup
(
optarg
);
break
;
case
'D'
:
/* bind DN */
binddn
=
strdup
(
optarg
);
break
;
case
'd'
:
#ifdef LDAP_DEBUG
ldap_debug
=
lber_debug
=
atoi
(
optarg
);
/* */
...
...
@@ -117,32 +143,55 @@ main( int argc, char **argv )
fprintf
(
stderr
,
"compile with -DLDAP_DEBUG for debugging
\n
"
);
#endif
/* LDAP_DEBUG */
break
;
#ifdef HAVE_KERBEROS
case
'k'
:
/* use kerberos bind */
kerberos
=
2
;
case
'F'
:
/* field separator */
sep
=
strdup
(
optarg
);
break
;
case
'f'
:
/* input file */
infile
=
strdup
(
optarg
);
break
;
case
'h'
:
/* ldap host */
ldaphost
=
strdup
(
optarg
);
break
;
case
'K'
:
/* use kerberos bind, 1st part only */
kerberos
=
1
;
#ifdef HAVE_KERBEROS
authmethod
=
LDAP_AUTH_KRBV41
;
#else
fprintf
(
stderr
,
"%s was not compiled with Kerberos support
\n
"
,
argv
[
0
]);
#endif
break
;
case
'k'
:
/* use kerberos bind */
#ifdef HAVE_KERBEROS
authmethod
=
LDAP_AUTH_KRBV4
;
#else
fprintf
(
stderr
,
"%s was not compiled with Kerberos support
\n
"
,
argv
[
0
]);
#endif
case
'u'
:
/* include UFN */
++
includeufn
;
break
;
case
't'
:
/* write attribute values to /tmp files */
++
vals2tmp
;
case
'l'
:
/* time limit */
timelimit
=
atoi
(
optarg
);
break
;
case
'R'
:
/* don't automatically chase referrals */
referrals
=
(
int
)
LDAP_OPT_OFF
;
case
'n'
:
/* do Not do any searches */
++
not
;
break
;
case
'A'
:
/* retrieve attribute names only -- no values */
++
attrsonly
;
case
'p'
:
/* ldap port */
ldapport
=
atoi
(
optarg
);
break
;
case
'L'
:
/* print entries in LDIF format */
++
ldif
;
/* fall through -- always allow binary when outputting LDIF */
case
'B'
:
/* allow binary values to be printed */
++
allow_binary
;
case
'R'
:
/* don't automatically chase referrals */
referrals
=
(
int
)
LDAP_OPT_OFF
;
break
;
case
'S'
:
/* sort attribute */
sortattr
=
strdup
(
optarg
);
break
;
case
's'
:
/* search scope */
if
(
strncasecmp
(
optarg
,
"base"
,
4
)
==
0
)
{
scope
=
LDAP_SCOPE_BASE
;
...
...
@@ -156,53 +205,32 @@ main( int argc, char **argv )
}
break
;
case
'a'
:
/* set alias deref option */
if
(
strncasecmp
(
optarg
,
"never"
,
5
)
==
0
)
{
deref
=
LDAP_DEREF_NEVER
;
}
else
if
(
strncasecmp
(
optarg
,
"search"
,
5
)
==
0
)
{
deref
=
LDAP_DEREF_SEARCHING
;
}
else
if
(
strncasecmp
(
optarg
,
"find"
,
4
)
==
0
)
{
deref
=
LDAP_DEREF_FINDING
;
}
else
if
(
strncasecmp
(
optarg
,
"always"
,
6
)
==
0
)
{
deref
=
LDAP_DEREF_ALWAYS
;
}
else
{
fprintf
(
stderr
,
"alias deref should be never, search, find, or always
\n
"
);
usage
(
argv
[
0
]
);
}
break
;
case
'F'
:
/* field separator */
sep
=
strdup
(
optarg
);
break
;
case
'f'
:
/* input file */
infile
=
strdup
(
optarg
);
break
;
case
'h'
:
/* ldap host */
ldaphost
=
strdup
(
optarg
);
break
;
case
'b'
:
/* searchbase */
base
=
strdup
(
optarg
);
case
't'
:
/* write attribute values to /tmp files */
++
vals2tmp
;
break
;
case
'D'
:
/* bind DN */
binddn
=
strdup
(
optarg
);
case
'u'
:
/* include UFN */
++
includeufn
;
break
;
case
'p'
:
/* ldap port */
ldapport
=
atoi
(
optarg
);
case
'v'
:
/* verbose mode */
++
verbose
;
break
;
case
'w'
:
/* bind password */
case
'W'
:
want_passwd
++
;
break
;
case
'w'
:
/* bind password */
passwd
=
strdup
(
optarg
);
break
;
case
'l'
:
/* time limit */
timelimit
=
atoi
(
optarg
);
break
;
case
'z'
:
/* size limit */
case
'z'
:
/* size limit */
sizelimit
=
atoi
(
optarg
);
break
;
case
'S'
:
/* sort attribute */
sortattr
=
strdup
(
optarg
);
break
;
default:
usage
(
argv
[
0
]
);
default:
usage
(
argv
[
0
]);
}
}
...
...
@@ -229,47 +257,42 @@ main( int argc, char **argv )
attrs
=
&
argv
[
optind
];
}
if
(
want_passwd
&&
!
passwd
)
passwd
=
strdup
(
getpass
(
"Enter LDAP password: "
));
if
(
infile
!=
NULL
)
{
if
(
infile
[
0
]
==
'-'
&&
infile
[
1
]
==
'\0'
)
{
fp
=
stdin
;
}
else
if
((
fp
=
fopen
(
infile
,
"r"
))
==
NULL
)
{
perror
(
infile
);
exit
(
1
);
}
else
if
((
fp
=
fopen
(
infile
,
"r"
))
==
NULL
)
{
perror
(
infile
);
exit
(
1
);
}
}
if
(
verbose
)
{
printf
(
"ldap_open( %s, %d )
\n
"
,
ldaphost
,
ldapport
);
}
if
(
verbose
)
printf
(
"ldap_open(%s, %d)
\n
"
,
ldaphost
,
ldapport
);
if
((
ld
=
ldap_open
(
ldaphost
,
ldapport
))
==
NULL
)
{
perror
(
ldaphost
);
exit
(
1
);
if
((
ld
=
ldap_open
(
ldaphost
,
ldapport
))
==
NULL
)
{
perror
(
ldaphost
);
return
(
1
);
}
if
(
ldap_set_option
(
ld
,
LDAP_OPT_DEREF
,
(
void
*
)
&
deref
)
==
-
1
)
{
/* set option error */
}
if
(
ldap_set_option
(
ld
,
LDAP_OPT_TIMELIMIT
,
(
void
*
)
&
timelimit
)
==
-
1
)
{
/* set option error */
}
if
(
ldap_set_option
(
ld
,
LDAP_OPT_SIZELIMIT
,
(
void
*
)
&
sizelimit
)
==
-
1
)
{
/* set option error */
}
if
(
ldap_set_option
(
ld
,
LDAP_OPT_REFERRALS
,
(
void
*
)
referrals
)
==
-
1
)
{
/* set option error */
}
if
(
!
kerberos
)
{
authmethod
=
LDAP_AUTH_SIMPLE
;
}
else
if
(
kerberos
==
1
)
{
authmethod
=
LDAP_AUTH_KRBV41
;
}
else
{
authmethod
=
LDAP_AUTH_KRBV4
;
if
(
ldap_set_option
(
ld
,
LDAP_OPT_DEREF
,
(
void
*
)
&
deref
)
==
-
1
)
{
/* set option error */
}
if
(
ldap_set_option
(
ld
,
LDAP_OPT_TIMELIMIT
,
(
void
*
)
&
timelimit
)
==
-
1
)
{
/* set option error */
}
if
(
ldap_set_option
(
ld
,
LDAP_OPT_SIZELIMIT
,
(
void
*
)
&
sizelimit
)
==
-
1
)
{
/* set option error */
}
if
(
ldap_set_option
(
ld
,
LDAP_OPT_REFERRALS
,
(
void
*
)
referrals
)
==
-
1
)
{
/* set option error */
}
if
(
ldap_bind_s
(
ld
,
binddn
,
passwd
,
authmethod
)
!=
LDAP_SUCCESS
)
{
ldap_perror
(
ld
,
"ldap_bind"
);
exit
(
1
);
return
(
1
);
}
if
(
verbose
)
{
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment