Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Robert Dubner
OpenLDAP
Commits
487d1aa2
Commit
487d1aa2
authored
Jan 22, 1999
by
Kurt Zeilenga
Browse files
Import nextid cleanup and no-return upon failed add changes from releng 1.2
parent
f1231b12
Changes
4
Hide whitespace changes
Inline
Side-by-side
servers/slapd/back-ldbm/back-ldbm.h
View file @
487d1aa2
...
...
@@ -109,6 +109,7 @@ struct attrinfo {
struct
ldbminfo
{
ID
li_nextid
;
char
*
li_nextid_file
;
pthread_mutex_t
li_root_mutex
;
pthread_mutex_t
li_add_mutex
;
pthread_mutex_t
li_nextid_mutex
;
...
...
servers/slapd/back-ldbm/config.c
View file @
487d1aa2
...
...
@@ -37,6 +37,12 @@ ldbm_back_config(
}
li
->
li_directory
=
ch_strdup
(
argv
[
1
]
);
li
->
li_nextid_file
=
ch_malloc
(
strlen
(
li
->
li_directory
)
+
sizeof
(
"/NEXTID"
)
);
strcpy
(
li
->
li_nextid_file
,
li
->
li_directory
);
strcat
(
li
->
li_nextid_file
,
"/NEXTID"
);
/* mode with which to create new database files */
}
else
if
(
strcasecmp
(
argv
[
0
],
"mode"
)
==
0
)
{
if
(
argc
<
2
)
{
...
...
servers/slapd/back-ldbm/init.c
View file @
487d1aa2
...
...
@@ -23,7 +23,7 @@ ldbm_back_init(
li
=
(
struct
ldbminfo
*
)
ch_calloc
(
1
,
sizeof
(
struct
ldbminfo
)
);
/* arrange to read nextid later (on first request for it) */
li
->
li_nextid
=
-
1
;
li
->
li_nextid
=
NOID
;
/* default cache size */
li
->
li_cache
.
c_maxsize
=
DEFAULT_CACHE_SIZE
;
...
...
servers/slapd/back-ldbm/nextid.c
View file @
487d1aa2
...
...
@@ -13,65 +13,94 @@
#include "slap.h"
#include "back-ldbm.h"
static
ID
next_id_read
(
Backend
*
be
)
{
struct
ldbminfo
*
li
=
(
struct
ldbminfo
*
)
be
->
be_private
;
ID
id
;
char
buf
[
20
];
char
*
file
=
li
->
li_nextid_file
;
FILE
*
fp
;
if
(
(
fp
=
fopen
(
file
,
"r"
))
==
NULL
)
{
Debug
(
LDAP_DEBUG_ANY
,
"next_id_read: could not open
\"
%s
\"\n
"
,
file
,
0
,
0
);
return
NOID
;
}
if
(
fgets
(
buf
,
sizeof
(
buf
),
fp
)
==
NULL
)
{
Debug
(
LDAP_DEBUG_ANY
,
"next_id_read: could not fgets nextid from
\"
%s
\"\n
"
,
file
,
0
,
0
);
fclose
(
fp
);
return
NOID
;
}
id
=
atol
(
buf
);
fclose
(
fp
);
if
(
id
<
1
)
{
Debug
(
LDAP_DEBUG_ANY
,
"next_id_read %lu: atol(%s) return non-positive integer
\n
"
,
id
,
buf
,
0
);
return
NOID
;
}
return
id
;
}
static
int
next_id_write
(
Backend
*
be
,
ID
id
)
{
struct
ldbminfo
*
li
=
(
struct
ldbminfo
*
)
be
->
be_private
;
char
buf
[
20
];
char
*
file
=
li
->
li_nextid_file
;
FILE
*
fp
;
int
rc
;
if
(
(
fp
=
fopen
(
file
,
"w"
))
==
NULL
)
{
Debug
(
LDAP_DEBUG_ANY
,
"next_id_write(%lu): could not open
\"
%s
\"\n
"
,
id
,
file
,
0
);
return
-
1
;
}
rc
=
0
;
if
(
fprintf
(
fp
,
"%ld
\n
"
,
id
)
==
EOF
)
{
Debug
(
LDAP_DEBUG_ANY
,
"next_id_write(%lu): cannot fprintf
\n
"
,
id
,
0
,
0
);
rc
=
-
1
;
}
if
(
fclose
(
fp
)
!=
0
)
{
Debug
(
LDAP_DEBUG_ANY
,
"next_id_write %lu: cannot fclose
\n
"
,
id
,
0
,
0
);
rc
=
-
1
;
}
return
rc
;
}
ID
next_id
(
Backend
*
be
)
{
struct
ldbminfo
*
li
=
(
struct
ldbminfo
*
)
be
->
be_private
;
char
buf
[
MAXPATHLEN
];
char
buf2
[
20
];
FILE
*
fp
;
ID
id
;
sprintf
(
buf
,
"%s/NEXTID"
,
li
->
li_directory
);
pthread_mutex_lock
(
&
li
->
li_nextid_mutex
);
/* first time in here since startup - try to read the nexid */
if
(
li
->
li_nextid
==
-
1
)
{
if
(
(
fp
=
fopen
(
buf
,
"r"
))
==
NULL
)
{
Debug
(
LDAP_DEBUG_ANY
,
"next_id %lu: could not open
\"
%s
\"\n
"
,
li
->
li_nextid
,
buf
,
0
);
li
->
li_nextid
=
1
;
if
(
li
->
li_nextid
==
NOID
)
{
li
->
li_nextid
=
next_id_read
(
be
);
}
else
{
if
(
fgets
(
buf2
,
sizeof
(
buf2
),
fp
)
!=
NULL
)
{
li
->
li_nextid
=
atol
(
buf2
);
if
(
li
->
li_nextid
<
1
)
{
/* protect against bad data */
Debug
(
LDAP_DEBUG_ANY
,
"next_id %lu: atol(%s) return non-positive integer
\n
"
,
li
->
li_nextid
,
buf2
,
0
);
li
->
li_nextid
=
1
;
}
}
else
{
Debug
(
LDAP_DEBUG_ANY
,
"next_id %lu: could not fgets nextid from
\"
%s
\"\n
"
,
li
->
li_nextid
,
buf2
,
0
);
li
->
li_nextid
=
1
;
}
fclose
(
fp
);
if
(
li
->
li_nextid
==
NOID
)
{
li
->
li_nextid
=
1
;
}
}
id
=
li
->
li_nextid
++
;
if
(
(
fp
=
fopen
(
buf
,
"w"
))
==
NULL
)
{
Debug
(
LDAP_DEBUG_ANY
,
"next_id %lu: could not open
\"
%s
\"\n
"
,
li
->
li_nextid
,
buf
,
0
);
}
else
{
if
(
fprintf
(
fp
,
"%ld
\n
"
,
li
->
li_nextid
)
==
EOF
)
{
Debug
(
LDAP_DEBUG_ANY
,
"next_id %lu: cannot fprintf
\n
"
,
li
->
li_nextid
,
0
,
0
);
}
if
(
fclose
(
fp
)
!=
0
)
{
Debug
(
LDAP_DEBUG_ANY
,
"next_id %lu: cannot fclose
\n
"
,
li
->
li_nextid
,
0
,
0
);
}
}
(
void
)
next_id_write
(
be
,
li
->
li_nextid
);
pthread_mutex_unlock
(
&
li
->
li_nextid_mutex
);
return
(
id
);
...
...
@@ -80,9 +109,8 @@ next_id( Backend *be )
void
next_id_return
(
Backend
*
be
,
ID
id
)
{
#ifdef NEXT_ID_RETURN
struct
ldbminfo
*
li
=
(
struct
ldbminfo
*
)
be
->
be_private
;
char
buf
[
MAXPATHLEN
];
FILE
*
fp
;
pthread_mutex_lock
(
&
li
->
li_nextid_mutex
);
...
...
@@ -91,68 +119,27 @@ next_id_return( Backend *be, ID id )
return
;
}
sprintf
(
buf
,
"%s/NEXTID"
,
li
->
li_directory
);
li
->
li_nextid
--
;
if
(
(
fp
=
fopen
(
buf
,
"w"
))
==
NULL
)
{
Debug
(
LDAP_DEBUG_ANY
,
"next_id_return of %lu: could not open
\"
%s
\"
next id %lu
\n
"
,
id
,
buf
,
li
->
li_nextid
);
}
else
{
if
(
fprintf
(
fp
,
"%ld
\n
"
,
li
->
li_nextid
)
==
EOF
)
{
Debug
(
LDAP_DEBUG_ANY
,
"next_id_return of %lu: cannot fprintf
\"
%s
\"
next id %lu
\n
"
,
id
,
buf
,
li
->
li_nextid
);
}
if
(
fclose
(
fp
)
!=
0
)
{
Debug
(
LDAP_DEBUG_ANY
,
"next_id_return of %lu: cannot fclose
\"
%s
\"
next id %lu
\n
"
,
id
,
buf
,
li
->
li_nextid
);
}
}
(
void
)
next_id_write
(
be
,
li
->
li_nextid
);
pthread_mutex_unlock
(
&
li
->
li_nextid_mutex
);
#endif
}
ID
next_id_get
(
Backend
*
be
)
{
struct
ldbminfo
*
li
=
(
struct
ldbminfo
*
)
be
->
be_private
;
char
buf
[
MAXPATHLEN
];
char
buf2
[
20
];
FILE
*
fp
;
ID
id
;
sprintf
(
buf
,
"%s/NEXTID"
,
li
->
li_directory
);
pthread_mutex_lock
(
&
li
->
li_nextid_mutex
);
/* first time in here since startup - try to read the nexid */
if
(
li
->
li_nextid
==
-
1
)
{
if
(
(
fp
=
fopen
(
buf
,
"r"
))
==
NULL
)
{
Debug
(
LDAP_DEBUG_ANY
,
"next_id_get %lu: could not open
\"
%s
\"\n
"
,
li
->
li_nextid
,
buf
,
0
);
li
->
li_nextid
=
1
;
if
(
li
->
li_nextid
==
NOID
)
{
li
->
li_nextid
=
next_id_read
(
be
);
}
else
{
if
(
fgets
(
buf2
,
sizeof
(
buf2
),
fp
)
!=
NULL
)
{
li
->
li_nextid
=
atol
(
buf2
);
if
(
li
->
li_nextid
<
1
)
{
/* protect against bad data */
Debug
(
LDAP_DEBUG_ANY
,
"next_id_get %lu: atol(%s) return non-positive integer
\n
"
,
li
->
li_nextid
,
buf2
,
0
);
li
->
li_nextid
=
1
;
}
}
else
{
Debug
(
LDAP_DEBUG_ANY
,
"next_id_get %lu: cannot fgets nextid from
\"
%s
\"\n
"
,
li
->
li_nextid
,
buf2
,
0
);
li
->
li_nextid
=
1
;
}
fclose
(
fp
);
if
(
li
->
li_nextid
==
NOID
)
{
li
->
li_nextid
=
1
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment