#
296373 |
|
04-Mar-2016 |
marius |
- Copy stable/10@296371 to releng/10.3 in preparation for 10.3-RC1 builds. - Update newvers.sh to reflect RC1. - Update __FreeBSD_version to reflect 10.3. - Update default pkg(8) configuration to use the quarterly branch.
Approved by: re (implicit) |
#
256281 |
|
10-Oct-2013 |
gjb |
Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation
|
#
253253 |
|
12-Jul-2013 |
hrs |
Fix a wrong memcpy of struct sockaddr.
Spotted by: dt71@gmx.com
|
#
244538 |
|
21-Dec-2012 |
kevlo |
Fix socket calls on error post-r243965.
Submitted by: Garrett Cooper
|
#
230279 |
|
17-Jan-2012 |
hrs |
Revert changes in r228790. It prevented the ypserv daemon from working with with multiple socktypes.
|
#
228791 |
|
21-Dec-2011 |
eadler |
- Fix style(9) bug I introduced in the last commit
Approved by: jhb
|
#
228790 |
|
21-Dec-2011 |
eadler |
- Remove extraneous null ptr deref checks - Fix memory leak
Submitted by: Slono Slono <slonoman2011@yandex.ru> Approved by: jhb MFC after: 1 week
|
#
226725 |
|
25-Oct-2011 |
glebius |
Protect NIS server with madvise(2) since this daemon is required for succesful authentication of users.
|
#
223340 |
|
20-Jun-2011 |
kuriyama |
Add missing argument for -h in usage.
|
#
202707 |
|
20-Jan-2010 |
hrs |
Simply ignore unsupported protocols listed in /etc/netconfig and abort only if no transport is available. This fixes (INET && !INET6) and (!INET && INET6) case, for example.
|
#
202686 |
|
20-Jan-2010 |
hrs |
Try a privileged port for binding whenever possible because the ypbind daemon requires the ypserv daemon is running on a privileged port.
Reported by: Andrzej Tobola
|
#
201145 |
|
28-Dec-2009 |
antoine |
(S)LIST_HEAD_INITIALIZER takes a (S)LIST_HEAD as an argument. Fix some wrong usages. Note: this does not affect generated binaries as this argument is not used.
PR: 137213 Submitted by: Eygene Ryabinkin (initial version) MFC after: 1 month
|
#
200478 |
|
13-Dec-2009 |
hrs |
- Fix main() to use two separated sockets for the two transports when "-P port" is specified. It invoked svc{tcp,udp}_create() for only one of the two allocated sockets, and prevented the TCP socket from binding to as the result.
- Use TI-RPC functions and handle sockets in a transport-independent way. At this moment only AF_INET ("udp" and "tcp") is supported because others need rewrites of ACL handling and yp clients.
- Add '-h addr' to specify addresses to bind to.
- Convert _msgout() to use variable argument lists and remove asprintf() for error strings.
- Remove register storage class specifier.
Discussed with: kuriyama MFC after: 1 week
|
#
200099 |
|
04-Dec-2009 |
kuriyama |
- Replace magic number with YPOLDVERS macro (which may be missed in r14262).
|
#
175951 |
|
03-Feb-2008 |
matteo |
Add -P <port> option to allow binding to a specific port.
PR: bin/109494 Submitted by: mtm MFC after: 1 week
|
#
146446 |
|
20-May-2005 |
charnier |
Remove unused variables. int -> size_t for lenghts.
|
#
143415 |
|
11-Mar-2005 |
stefanf |
Use socklen_t where appropriate.
|
#
114601 |
|
03-May-2003 |
obrien |
Use __FBSDID over rcsid[]. Protect copyright[] where needed.
|
#
90298 |
|
06-Feb-2002 |
des |
ANSIfy and remove some dead code.
Sponsored by: DARPA, NAI Labs
|
#
90297 |
|
06-Feb-2002 |
des |
Apply the following mechanical transformations in preparation for ansification and constification:
s{\s+__P\((\(.*?\))\)}{$1}g; s{\(\s+}{\(}g; s{\s+\)}{\)}g; s{\s+,}{,}g; s{(\s+)(for|if|switch|while)\(}{$1$2 \(}g; s{return ([^\(].*?);}{return ($1);}g; s{([\w\)])([!=+/\*-]?=)([\w\(+-])}{$1 $2 $3}g; s{\s+$}{\n};g
Also add $FreeBSD$ where needed.
MFC after: 1 week
|
#
62989 |
|
12-Jul-2000 |
kris |
Don't call syslog() without a format string.
|
#
59749 |
|
29-Apr-2000 |
asmodai |
Remove a bogus include.
|
#
50479 |
|
28-Aug-1999 |
peter |
$Id$ -> $FreeBSD$
|
#
46186 |
|
29-Apr-1999 |
wpaul |
Add some extra checks to make sure that a child ypserv process doesn't try to fork() a child of its own, which could result in several children ypservs running at once. I'm still not sure exactly what leads to this condition, but these fixes should stop it from causing trouble. A new function, yp_fork() checks to see if the current process is already a child of the parent ypserv, and returns failure (and logs an error message) rather than spawning another child.
|
#
43847 |
|
10-Feb-1999 |
wpaul |
Add some tweaks to hopefully fix a problem I've started to notice recently. Under certain conditions (possibly associated with heavy load), ypserv will fork() child processes that don't exit like they're supposed to. I think this is because of some suspect logic in the ypproc_all procedure. I updated it to use what I hope is a more bulletproof approach.
Also tweaked yp_svc_run() a little so that the 'are we a child?' test happens at every pass through the for(;;) loop, not just immediately after returning from svc_getreqset2().
|
#
36639 |
|
04-Jun-1998 |
wpaul |
Protect errno in signal handlers, like in portmap.
|
#
33250 |
|
11-Feb-1998 |
wpaul |
Fix a bug in the database handle caching. This has to do with the way the underlying database code works. When dealing with first/next queries, you have the notion of a database 'cursor,' which is essentially a file pointer for the database. To select the first entry, you do a fetch with the R_FIRST flag set, then you can use the R_NEXT flag to enumerate the other entries in the database. Unfortunately, doing a direct fetch with no flag does _not_ set the 'cursor,' so you can't do a direct fetch and then enumerate the table from there.
The bug is that cached handles generated as the result of a YPPROC_MATCH were being treated as though they were the same as handles generated by a YPPROC_FIRST, which is not the case. The manifestation is that if you do a 'ypmatch first-key-in-map map' followed by a yp_first()/yp_next() pair, the yp_first() and yp_next() both return the first key in the table, which makes the entry appear to be duplicated.
A couple smaller things since I'm here:
- yp_main.c and yp_error.c both have a global 'int debug' in them. For some reason, our cc/ld doesn't flag this as a multiply defined symbol even though it should. Removed the declaration from yp_main.c; we want the one in yp_error.c.
- The Makefile wasn't installing ypinit in the right place.
|
#
30827 |
|
29-Oct-1997 |
charnier |
Typos in man page. Cosmetics in error strings.
|
#
24428 |
|
31-Mar-1997 |
imp |
compare return value from getopt against -1 rather than EOF, per the final posix standard on the topic.
|
#
22997 |
|
22-Feb-1997 |
peter |
Revert $FreeBSD$ to $Id$
|
#
21673 |
|
14-Jan-1997 |
jkh |
Make the long-awaited change from $Id$ to $FreeBSD$
This will make a number of things easier in the future, as well as (finally!) avoiding the Id-smashing problem which has plagued developers for so long.
Boy, I'm glad we're not using sup anymore. This update would have been insane otherwise.
|
#
21104 |
|
30-Dec-1996 |
peter |
Make the select() call work like the others in the system.. ie: don't assume that the timeval will be preserved. As the man page says: ".. it is unwise to assume that the timeout value will be unmodified by the select() call." This happens on Linux and on my system at least.
|
#
21097 |
|
30-Dec-1996 |
peter |
Fix harmless bug found by new pointer-to-function prototypes.
|
#
20907 |
|
25-Dec-1996 |
wpaul |
More async resolver refinements:
- yp_main.c: Always add the resolver socket to the set of fds monitored by select(). It can happen that pending == 0 but we still have some data in the socket buffer from an old query. This way, the data will be flushed in a timely manner.
- yp_extern.h: remove proto for yp_dns_pending() since we don't need it anynmore.
- yp_server.c: call yp_async_lookup_name()/yp_async_lookup_addr() functions with the svc_req pointer as an arg instead of the xprt. (The svc_req struct includes a pointer to the transport handle, and it also has the service version number which the async DNS code will need. (see below))
- yp_dnslookup.c:
o Nuke yp_dns_pending() since we don't need it anymore. o In yp_run_dnsq(), swallow up and ignore replies if no requests are pending or the ID doesn't match any of the IDs in the queue. o In yp_send_dns_reply(), we assume that we will always be replying to an NIS v2 client. While this will probably always be the case, we do support the v1 'match' procedure, and it has a different result struct than v2. For completeness, support replying to both NIS v1 and v2 clients. o Update the queue entry structure to include a member to keep track of the NIS version number. o Have yp_async_lookup_name/addr() extract the version number from the svc_req structure and save it with the queue entry for yp_send_dns_reply() to inspect later. o Add some comments.
|
#
20818 |
|
22-Dec-1996 |
wpaul |
Big round o changes:
- yp_dblookup.c: Create non-DB specific database access functions. Using these allows access to the underlying database functions without needing explicit knowledge of Berkeley DB. (These are used only when DB_CACHE is #defined. Other programs that use the non-caching functions (yp_mkdb, ypxfr, yppush, rpc.yppasswdd) shouldn't notice the difference.)
- yp_dnslookup: Implement async DNS lookups. We send our own DNS requests using UDP and put the request in a queue. When the response arrives, we use the ID in the header to find the corresponsing queue entry and then send the response to the client. We can go about our business and handle other YP requests in the meantime. This way, we can deal with time consuming DNS requests without blocking and without forking.
- yp_server.c: Convert to using new non-DB-specific database access functions. This simplifies the code a bit and removes the need for this module to know anything about Berkeley DB. Also convert the ypproc_match_2_svc() function to use the async DNS lookup routines.
- yp_main.c: tweak yp_svc_run() to add the resolver socket to the set of descriptors monitored in the select() loop. Also add a timeout to select(); we may get stale DNS requests stuck in the queue which we want to invalidate after a while. If the timeout hits, we decrement the ttl on all pending DNS requests and nuke those requests that aren't handled before ttl hits zero.
- yp_extern.h: Add prototypes for new stuff.
- yp_svc_udp.c (new file): The async resolver code needs to be able to rummage around inside the RPC UDP transport handle in order to work correcty. There's basically one transport handle, and each time a request comes in, the transaction ID in the handle is changed. This means that if we queue a DNS request, then we handle some other unrelated requests, we will be unable to send the DNS response because the transaction ID and remote address of the client that made the DNS request will have been lost. What we need to do is save the client address and transaction ID in the queue entry for the DNS request, then put the transaction ID and address back in the transport handle when we're ready to reply. (And then we have to undo the change so as not to confuse any other part of the server.) The trouble is that the transaction ID is hidden in an opaque part of the transport handle, and only the code in the svc_udp module in the RPC library knows how to handle it. This file contains a couple of functions that let us read and set the transaction ID in spite of this. This is really a dirty trick and I should be taken out and shot for even thinking about it, but there's no other way to get this stuff to work.
- Makefile: add yp_svc_udp.c to SRCS.
|
#
20100 |
|
03-Dec-1996 |
wpaul |
Back out the non-forking YPPROC_ALL stuff. Whatever drugs I was doing when I came up with this idea weren't strong enough to help me see it through. If this was a self-contained application and I had complete control over what data got sent through what socket and when, I might be able to get everything to work right without blocking, but instead I have RPC/XDR in between me and the socket layer, and they have their own ideas about what to do.
Maybe one day I'll go totally mad and figure out the right way to do this; in the meantime this mess goes on the back burner.
|
#
20053 |
|
30-Nov-1996 |
wpaul |
This commit changes the YPPROC_ALL procecdure so that it handles requests _without_ using fork().
The problem with YPPROC_ALL is that it transmits an entire map through a TCP pipe as the result of a single RPC call. First of all, this requires certain hackery in the XDR filter. Second, if the map being sent is large, the server can end up spending lots of time in the XDR filter sending to just the one client, while requests for other clients will go unanswered.
My original solution for this was to fork() the request into a child process which terminates after the map has been transmitted (or the transfer is interrupted due to an error). This leaves the parent free to handle other requests. But this solution is kind of lame: fork() is relatively expensive, and we have to keep a cap on the number of child processes to keep from swamping the system.
What we do now is grab control of the service transport handle and XDR handle from the RPC library and send the records one at a time ourselves instead of letting the RPC library do it. We send a record, then go back to the svc_run() loop and select() on the socket. If select() says we can still write data, we send the next record. Then we call svc_getreqset() and handle other RPCs and loop around again. This way, we can handle other RPCs between records.
We manage multiple YPPROC_ALL requests using a circular queue. When a request is done, we dequeue it and destroy the handle. We also tag each request with a ttl which is decremented whevever we run the queue and a handle isn't serviced. This lets us nuke requests that have sat idle for too long (if we didn't do this, we might run out of socket descriptors.)
Now all I have to do is come up with an async resolver, and ypserv won't need to fork() at all. :)
Note: these changes should not go into 2.2 unless they get a very throrough shakedown before the final cutoff date.
|
#
16044 |
|
31-May-1996 |
wpaul |
Small touch-ups -- no functional changes.
Fix some comments to reflect reality (in some cases I made changes to code but not to the comments).
Change some instances of 'inline' to '__inline' to pacify gcc -ansi -pedantic.
Use rcsid strings more consistently.
Make 'oldaddr' static in yp_access().
Use strcpy()/strcat() in yp_open_db_cache() instead of snprintf(). (Seems to be a little faster this way.)
|
#
15426 |
|
28-Apr-1996 |
wpaul |
Performance enhancements (I hope) and new stuff:
yp_dblookup.c:
- Implement database handle caching. What this means is that instead of opening and closing map databases for each request, we open a database and save the handle (and, if requested, the key index) in an array. This saves a bit of overhead on things like repeated YPPROC_NEXT calls, such as you'd get from getpwent(). Normally, each YPPROC_NEXT would require open()ing the database, seeking to the location supplied by the caller (which is time consuming with hash databases as the R_CURSOR flag doesn't work), reading the data, close()ing the database and then shipping the data off to the caller. The system call overhead is prohibitive, especially with very large maps. By caching the handle to an open database, we elimitate at least the open()/close() system calls, as well as the associated DB setup and tear-down operations, for a large percentage of the time. This improves performance substantially at the cost of consuming a little more memory than before.
Note that all the caching support is surrounded by #ifdef DB_CACHE so that this same source module can still be used by other programs that don't need it.
- Make yp_open_db() call yp_validdomain(). Doing it here saves cycles when caching is enabled since a hit on the map cache list by definition means that the domain being referenced is valid.
- Also make yp_open_db() check for exhaustion of file descriptors, just in case.
yp_server.c:
- Reorganize things a little to take advantage of the database handle caching. Add a call to yp_flush_all() in ypproc_clear_2_svc().
- Remove calls to yp_validdomain() from some of the service procedures. yp_validdomain() is called inside yp_open_db() now, so procedures that call into the database package don't need to use yp_validdomain() themselves.
- Fix a bogosity in ypproc_maplist_2_svc(): don't summarily initiallize the result.maps pointer to NULL. This causes yp_maplist_free() to fail and leaks memory.
- Make ypproc_master_2_svc() copy the string it gets from the database package into a private static buffer before trying to NUL terminate it. This is necessary with the DB handle caching: stuffing a NUL into the data returned by DB package will goof it up internally.
yp_main.c:
- Stuff for DB handle caching: call yp_init_dbs() to clear the handle array and add call to yp_flush_all() to the SIGHUP signal handler.
Makefile.yp:
- Reorganize to deal with database caching. yp_mkdb(8) can now be used to send a YPPROC_CLEAR signal to ypserv(8). Call it after each map is created to refresh ypserv's cache.
- Add support for mail.alias map. Contributed by Mike Murphy (mrm@sceard.com).
- Make default location for the netgroups source file be /var/yp/netgroup instead of /etc/netgroup.
mkaliases:
- New file: script to generate mail.alias map. Contributed by Mike Murphy (mrm@sceard.com).
Makefile:
- Install Makefile.yp as /var/yp/Makefile.dist and link it to /var/yp/Makefile only if /var/yp/Makefile doesn't already exist. Suggested by Peter Wemm.
- Install new mkaliases script in /usr/libexec along with mknetid.
- Use somewhat saner approach to generating rpcgen-dependent files as suggested by Garrett Wollman.
|
#
14262 |
|
26-Feb-1996 |
wpaul |
Add support for NIS v1 client procedures. The following procedures are currently implemented:
YPOLDPROC_NULL YPOLDPROC_DOMAIN YPOLDPROC_DOMAIN_NONACK YPOLDPROC_FIRST YPOLDPROC_NEXT YPOLDPROC_MATCH YPOLDPROC_POLL
These are all implemented as wrappers around their v2 counterparts.
The YPOLDPROC_PUSH, PULL and GET procedures are not implemented since a) I couldn't figure out exactly what to have them do, and b) I suspect they're used for doing map transfers between master and slave servers, which we already do using the v2 protocol anyway. This means we can server NIS v1 clients but can't be a master or slave with NIS v1-only servers. I think I'll get over it. :)
The -k (sunos_4_kludge) flag and associated code has been removed since it is no longer needed.
Also tweaked yp_access() to handle both sets of procedures and updated the man page.
|
#
14240 |
|
24-Feb-1996 |
wpaul |
Add real securenets support. By default, ypserv now uses /var/yp/securenets in the same was as the SunOS ypserv (same format, described in ypserv man page). If the user wants tcpwrapper style access control, they can recompile ypserv to use that instead. This way we get securenets without having to ship libwrap.a and tcpd.h with core FreeBSD distribution.
If /var/yp/securenets doesn't exist, ypserv allows all connections.
|
#
12997 |
|
23-Dec-1995 |
wpaul |
A few small tweaks related to ypxfr:
- Add a ypxfr_callback() function that we can use to signal failure to yppush(8) in the event that we can't fork()/exec() ypxfr(8). yppush only checks the return status from YPPROC_XFR enough to determine that the RPC succeded: it relies on its callback service to figure out whether or not the transfer actually worked.
- Give yp_dblookup.c its own debug variable (ypdb_debug) so that DB access debugging messages can be turned on or off independent of the program's global debug messages.
- Have the Makefile rpcgen the ypushresp_xfr_1() client stub for us and nuke the unneeded rule for yp_xdr.c that I left in by mistake (the XDR filters live in libc now).
|
#
12892 |
|
16-Dec-1995 |
wpaul |
This commit was generated by cvs2svn to compensate for changes in r12891, which included commits to RCS files with non-trunk default branches.
|
#
12891 |
|
16-Dec-1995 |
wpaul |
Import the new, non-GPL ypserv, written by yours truly. Functionally equivalent to the old ypserv, except that it doesn't support the -p [port] option to force the server to use a particular port.
The server stubs and yp.h header file are auto-generated from the yp.x protocol definition file. The auto-generated XDR routines in libc/yp are also used. The database access code has been broken out into a seperate module so that other NIS utilities (ypxfr in particular) can use it.
Note that the old mknetid script is being temporarily moved here; it will be replaced by an mknetid program which will eventually have a home under /usr/src/libexec. (The existing script is actually somewhat broken -- it doesn't handle hosts -- but this isn't a big deal at this point since the netid.byname map is really only useful fopr Secure RPC, which we don't have yet.)
|