]>
git.saurik.com Git - apple/network_cmds.git/blob - logger.tproj/logger.c
ba5493dc05d6c119ca13269c6de6232fa201e40c
   2  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. 
   4  * @APPLE_LICENSE_HEADER_START@ 
   6  * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved. 
   8  * This file contains Original Code and/or Modifications of Original Code 
   9  * as defined in and that are subject to the Apple Public Source License 
  10  * Version 2.0 (the 'License'). You may not use this file except in 
  11  * compliance with the License. Please obtain a copy of the License at 
  12  * http://www.opensource.apple.com/apsl/ and read it before using this 
  15  * The Original Code and all software distributed under the License are 
  16  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  17  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  18  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
  19  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  20  * Please see the License for the specific language governing rights and 
  21  * limitations under the License. 
  23  * @APPLE_LICENSE_HEADER_END@ 
  26  * Copyright (c) 1983, 1993 
  27  *      The Regents of the University of California.  All rights reserved. 
  29  * Redistribution and use in source and binary forms, with or without 
  30  * modification, are permitted provided that the following conditions 
  32  * 1. Redistributions of source code must retain the above copyright 
  33  *    notice, this list of conditions and the following disclaimer. 
  34  * 2. Redistributions in binary form must reproduce the above copyright 
  35  *    notice, this list of conditions and the following disclaimer in the 
  36  *    documentation and/or other materials provided with the distribution. 
  37  * 3. All advertising materials mentioning features or use of this software 
  38  *    must display the following acknowledgement: 
  39  *      This product includes software developed by the University of 
  40  *      California, Berkeley and its contributors. 
  41  * 4. Neither the name of the University nor the names of its contributors 
  42  *    may be used to endorse or promote products derived from this software 
  43  *    without specific prior written permission. 
  45  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 
  46  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
  47  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
  48  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 
  49  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
  50  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
  51  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
  52  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
  53  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
  54  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
  68 int     decode 
__P((char *, CODE 
*)); 
  69 int     pencode 
__P((char *)); 
  70 void    usage 
__P((void)); 
  73  * logger -- read and log utility 
  75  *      Reads from an input and arranges to write the result on the system 
  83         int ch
, logflags
, pri
; 
  89         while ((ch 
= getopt(argc
, argv
, "f:ip:st:")) != -1) 
  91                 case 'f':               /* file to log */ 
  92                         if (freopen(optarg
, "r", stdin
) == NULL
) { 
  93                                 (void)fprintf(stderr
, "logger: %s: %s.\n", 
  94                                     optarg
, strerror(errno
)); 
  98                 case 'i':               /* log process id also */ 
 101                 case 'p':               /* priority */ 
 102                         pri 
= pencode(optarg
); 
 104                 case 's':               /* log to standard error */ 
 105                         logflags 
|= LOG_PERROR
; 
 117         /* setup for logging */ 
 118         openlog(tag 
? tag 
: getlogin(), logflags
, 0); 
 119         (void) fclose(stdout
); 
 121         /* log input line if appropriate */ 
 123                 register char *p
, *endp
; 
 126                 for (p 
= buf
, endp 
= buf 
+ sizeof(buf
) - 2; *argv
;) { 
 128                         if (p 
+ len 
> endp 
&& p 
> buf
) { 
 129                                 syslog(pri
, "%s", buf
); 
 132                         if (len 
> sizeof(buf
) - 1) 
 133                                 syslog(pri
, "%s", *argv
++); 
 137                                 bcopy(*argv
++, p
, len
); 
 142                         syslog(pri
, "%s", buf
); 
 144                 while (fgets(buf
, sizeof(buf
), stdin
) != NULL
) 
 145                         syslog(pri
, "%s", buf
); 
 150  *  Decode a symbolic name to a numeric value 
 159         for (save 
= s
; *s 
&& *s 
!= '.'; ++s
); 
 162                 fac 
= decode(save
, facilitynames
); 
 164                         (void)fprintf(stderr
, 
 165                             "logger: unknown facility name: %s.\n", save
); 
 174         lev 
= decode(s
, prioritynames
); 
 176                 (void)fprintf(stderr
, 
 177                     "logger: unknown priority name: %s.\n", save
); 
 180         return ((lev 
& LOG_PRIMASK
) | (fac 
& LOG_FACMASK
)); 
 184 decode(name
, codetab
) 
 193         for (c 
= codetab
; c
->c_name
; c
++) 
 194                 if (!strcasecmp(name
, c
->c_name
)) 
 203         (void)fprintf(stderr
, 
 204             "logger: [-is] [-f file] [-p pri] [-t tag] [ message ... ]\n");