Hi Nick,
Thank for your replies.
But in that case I have to search the dhcpd enteries and then parse the
/var/log/ daemon.
But  I Just want to create another file with the format i like.
Plz anybody help!!!!!!!
Thanks in advance
Rahul

On 7/14/06, Nick Guenther <[EMAIL PROTECTED]> wrote:
>
> On 7/13/06, Rahul Sharma <[EMAIL PROTECTED]> wrote:
> > /*    $OpenBSD: db.c,v 1.10 2004/09/16 18:35:42 deraadt Exp $    */
> >
> > /*
> >  * Persistent database management routines for DHCPD.
> >  */
> >
> > /*
> >  * Copyright (c) 1995, 1996 The Internet Software Consortium.
> >  * All rights reserved.
> >  *
> >  * Redistribution and use in source and binary forms, with or without
> >  * modification, are permitted provided that the following conditions
> >  * are met:
> >  *
> >  * 1. Redistributions of source code must retain the above copyright
> >  *    notice, this list of conditions and the following disclaimer.
> >  * 2. Redistributions in binary form must reproduce the above copyright
> >  *    notice, this list of conditions and the following disclaimer in
> the
> >  *    documentation and/or other materials provided with the
> distribution.
> >  * 3. Neither the name of The Internet Software Consortium nor the names
> >  *    of its contributors may be used to endorse or promote products
> derived
> >  *    from this software without specific prior written permission.
> >  *
> >  * THIS SOFTWARE IS PROVIDED BY THE INTERNET SOFTWARE CONSORTIUM AND
> >  * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
> >  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
> >  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> >  * DISCLAIMED.  IN NO EVENT SHALL THE INTERNET SOFTWARE CONSORTIUM OR
> >  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> >  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> >  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
> >  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
> >  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
> >  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
> >  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> >  * SUCH DAMAGE.
> >  *
> >  * This software has been written for the Internet Software Consortium
> >  * by Ted Lemon <[EMAIL PROTECTED]> in cooperation with Vixie
> >  * Enterprises.  To learn more about the Internet Software Consortium,
> >  * see ``http://www.vix.com/isc''.  To learn more about Vixie
> >  * Enterprises, see ``http://www.vix.com''.
> >  */
> >
> > #include "dhcpd.h"
> >
> > FILE *db_file;
> > FILE *abc;
> > static int counting = 0;
> > static int count = 0;
> > time_t write_time;
> >
> > /*
> >  * Write the specified lease to the current lease database file.
> >  */
> > int
> > write_lease(struct lease *lease)
> > {
> >     struct tm *t;
> >     char tbuf[64];
> >     int errors = 0;
> >     int i;
> >
> >     if (counting)
> >         ++count;
> >     errno = 0;
> >     fprintf(db_file, "lease %s {\n", piaddr(lease->ip_addr));
> >     fprintf(abc,"%s\t",piaddr(lease->ip_addr));
> >     if (errno)
> >         ++errors;
> >
> >     t = gmtime(&lease->starts);
> >     snprintf(tbuf, sizeof(tbuf), "%d %d/%02d/%02d %02d:%02d:%02d;",
> >         t->tm_wday, t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
> >         t->tm_hour, t->tm_min, t->tm_sec);
> >
> >     errno = 0;
> >     fprintf(db_file, "\tstarts %s\n", tbuf);
> >     fprintf(abc, "%s\t", tbuf);
> >     if (errno)
> >         ++errors;
> >
> >     t = gmtime(&lease->ends);
> >     snprintf(tbuf, sizeof(tbuf), "%d %d/%02d/%02d %02d:%02d:%02d;",
> >         t->tm_wday, t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
> >         t->tm_hour, t->tm_min, t->tm_sec);
> >
> >     errno = 0;
> >     fprintf(db_file, "\tends %s", tbuf);
> >     fprintf(abc, "%s\t", tbuf);
> >     if (errno)
> >         ++errors;
> >
> >     if (lease->hardware_addr.hlen) {
> >         errno = 0;
> >         fprintf(db_file, "\n\thardware %s %s;",
> >             hardware_types[lease->hardware_addr.htype],
> >             print_hw_addr(lease->hardware_addr.htype,
> >             lease->hardware_addr.hlen,
> >             lease->hardware_addr.haddr));
> >
> >             fprintf(abc,"%s\n",
> >             print_hw_addr(lease->hardware_addr.htype,
> >             lease->hardware_addr.hlen,
> >             lease->hardware_addr.haddr));
> >
> >
> >         if (errno)
> >             ++errors;
> >     }
> >
> >     if (lease->uid_len) {
> >         int j;
> >
> >         errno = 0;
> >         fprintf(db_file, "\n\tuid %2.2x", lease->uid[0]);
> >         if (errno)
> >             ++errors;
> >
> >         for (j = 1; j < lease->uid_len; j++) {
> >             errno = 0;
> >             fprintf(db_file, ":%2.2x", lease->uid[j]);
> >             if (errno)
> >                 ++errors;
> >         }
> >         putc(';', db_file);
> >     }
> >
> >     if (lease->flags & BOOTP_LEASE) {
> >         errno = 0;
> >         fprintf(db_file, "\n\tdynamic-bootp;");
> >         if (errno)
> >             ++errors;
> >     }
> >
> >     if (lease->flags & ABANDONED_LEASE) {
> >         errno = 0;
> >         fprintf(db_file, "\n\tabandoned;");
> >         if (errno)
> >             ++errors;
> >     }
> >
> >     if (lease->client_hostname) {
> >         for (i = 0; lease->client_hostname[i]; i++)
> >             if (lease->client_hostname[i] < 33 ||
> >                 lease->client_hostname[i] > 126)
> >                 goto bad_client_hostname;
> >         errno = 0;
> >         fprintf(db_file, "\n\tclient-hostname \"%s\";",
> >             lease->client_hostname);
> >         if (errno)
> >             ++errors;
> >     }
> >
> > bad_client_hostname:
> >     if (lease->hostname) {
> >         for (i = 0; lease->hostname[i]; i++)
> >             if (lease->hostname[i] < 33 ||
> >                 lease->hostname[i] > 126)
> >                 goto bad_hostname;
> >         errno = 0;
> >         fprintf(db_file, "\n\thostname \"%s\";",
> >             lease->hostname);
> >         if (errno)
> >             ++errors;
> >     }
> >
> > bad_hostname:
> >     errno = 0;
> >     fputs("\n}\n", db_file);
> >     if (errno)
> >         ++errors;
> >
> >     if (errors)
> >         note("write_lease: unable to write lease %s",
> >             piaddr(lease->ip_addr));
> >
> >     return (!errors);
> > }
> >
> > /*
> >  * Commit any leases that have been written out...
> >  */
> > int
> > commit_leases(void)
> > {
> >     /*
> >      * Commit any outstanding writes to the lease database file. We need
> to
> >      * do this even if we're rewriting the file below, just in case the
> >      * rewrite fails.
> >      */
> >     if (fflush(db_file) == EOF) {
> >         note("commit_leases: unable to commit: %m");
> >         return (0);
> >     }
> >
> >     if (fsync(fileno(db_file)) == -1) {
> >         note("commit_leases: unable to commit: %m");
> >         return (0);
> >     }
> >
> >     /*
> >      * If we've written more than a thousand leases or if we haven't
> >      * rewritten the lease database in over an hour, rewrite it now.
> >      */
> >     if (count > 1000 || (count && cur_time - write_time > 3600)) {
> >         count = 0;
> >         write_time = cur_time;
> >         new_lease_file();
> >     }
> >
> >     return (1);
> > }
> >
> > void
> > db_startup(void)
> > {
> >     int db_fd,pqr;
> >
> >     /* open lease file. once we dropped privs it has to stay open */
> >     db_fd = open(path_dhcpd_db, O_WRONLY|O_CREAT, 0664);
> >     if (db_fd == -1)
> >         error("Can't create new lease file: %m");
> >     if ((db_file = fdopen(db_fd, "w")) == NULL)
> >         error("Can't fdopen new lease file!");
> >
> >     pqr = open("/var/db/log_dhcpd", O_WRONLY|O_CREAT, 0664);
> >     if (pqr == -1)
> >         error("Can't create new lease file: %m");
> >     if ((abc = fdopen(pqr, "w")) == NULL)
> >         error("Can't fdopen new lease file!");
> >
> >
> >     /* Read in the existing lease file... */
> >     read_leases();
> >     time(&write_time);
> >
> >     new_lease_file();
> > }
> >
> > void
> > new_lease_file(void)
> > {
> >     fflush(db_file);
> >     rewind(db_file);
> >
> >     /*
> >      * Write an introduction so people don't complain about time being
> off.
> >      */
> >     fprintf(db_file, "# All times in this file are in UTC (GMT), "
> >         "not your local timezone.\n");
> >     fprintf(db_file, "# The format of this file is documented in "
> >         "the dhcpd.leases(5) manual page.\n\n");
> >
> >     /* Write out all the leases that we know of... */
> >     counting = 0;
> >     write_leases();
> >
> >     fflush(db_file);
> >     ftruncate(fileno(db_file), ftello(db_file));
> >     fsync(fileno(db_file));
> >
> >     counting = 1;
> > }
> >
> >
> >
> > On 7/13/06, Rahul Sharma <[EMAIL PROTECTED]> wrote:
> > >
> > > Hi all,
> > > I am using dhcpd on openBSD.
> > > I wanted to make a log file of my own from which enteries will never
> > > vanish.
> > > Though I can use dhcpd.leases and parse it to get the values but i
> wanted
> > > to it from the sourse itself.
> > >
> > > What i have done so far ->
> > >
> > > I have made changes in db.c
> > > 1. in function db_startup()
> > > 2.write_lease(struct lease *lease)
> > >
> > > I am attaching db.c file with changes with it.
> > > wherever u find "FILE *abc or  int pqr".i have added those lines
> > > it is compiling allright but is not writing into the file.
> > >
> > > Plz Help some one..........................
> > > Rahul
>
> I notice that when you open the file we see:
>
> void
> db_startup(void)
> {
>    int db_fd,pqr; <-- FAIL
>
>    /* open lease file. once we dropped privs it has to stay open */
>    db_fd = open(path_dhcpd_db, O_WRONLY|O_CREAT, 0664);
>
> That is, you are opening the file locally, so the other routines can't
> get at it.
>
> This is a nice exercise, but parsing from leases.conf is probably a
> much better idea because it won't require constant patching as future
> versions come out.
>
> -Nick

Reply via email to