Path: utzoo!utgpu!news-server.csri.toronto.edu!mailrus!wuarchive!udel!haven!adm!news From: postmaster@ecf.ncsl.nist.gov (SMTP MAILER) Newsgroups: comp.unix.questions Subject: Mail Delivery Problem Message-ID: <24113@adm.BRL.MIL> Date: 11 Aug 90 11:45:47 GMT Sender: news@adm.BRL.MIL Lines: 1708 ----Reason for mail failure follows---- Sending mail to host ecf.ncsl.nist.gov : Fatal reply code to command 'RCPT TO:': 550 User "ise.ncsl.nist.gov" Unknown. ----Transcript of message follows---- Date: 11 Aug 90 06:51:00 EST From: info-unix@BRL.MIL Subject: INFO-UNIX Digest V10#113 To: "ise.ncsl.nist.gov" Return-Path: Received: from SEM.BRL.MIL by ecf.ncsl.nist.gov with SMTP ; Sat, 11 Aug 90 06:50:33 EST Received: from SEM.BRL.MIL by SEM.BRL.MIL id ab03279; 11 Aug 90 5:58 EDT Received: from sem.brl.mil by SEM.BRL.MIL id aa03263; 11 Aug 90 5:46 EDT Date: Sat, 11 Aug 90 05:45:48 EST From: The Moderator (Mike Muuss) To: INFO-UNIX@BRL.MIL Reply-To: INFO-UNIX@BRL.MIL Subject: INFO-UNIX Digest V10#113 Message-ID: <9008110546.aa03263@SEM.BRL.MIL> INFO-UNIX Digest Sat, 11 Aug 1990 V10#113 Today's Topics: book request, want advice Re: book request, want advice Re: reliable reads from pipes Re: Foo Bar Re: KSH recommendations? Re: how to use diff files? Re: ftp in background? Using Lex (and Yacc) on a string. Re: Using Lex (and Yacc) on a string. Need program to attach a pseudo tty to tcp/ip port Re: Get process name w/o using argv[0] in C function? Re:In defense of Larry WAS What's wrong with this Bourne shell script? Re: ksh question: what's the difference between [ ... ] and [[ ... ]] ? Re: Working with sed Needed: "user friendly" batch job scheduler article "Get Ready for GNU Software" in Computer World magazine Re: Suid script security SUMMARY: finding disk usage of partitions HP-UX 7.0 problems with ps(1) and awk(1) in pipe rexecd for ESIX? Re: help sought - securing a terminal/line Re: C-shell programming Re: How to tell if a process exists make's usage of VPATH Re: Printer Accounting File Parsing Re: backing up an entire unix/xenix system AWK Language Question permissions and parameters on terminal line Emacs Demented question -- anyone retargeted yacc for nawk? Timeout on shell command. ----------------------------------------------------------------- From: Asmodeus Subject: book request, want advice Keywords: unix books, non-trivial Date: 1 Aug 90 06:26:50 GMT To: info-unix@sem.brl.mil I would like the net's advice on (a) good book(s) concerning the non-trivial aspects of unix. I am already familiar w/many of the commands...that is not a problem...what i want is a book that details and explains many of the unix features that separate it from the smaller operating systems. Ex.-> devices, virtual memory, perl, other various shells...basically a good book that doesn't spend too much time explaining every line-editor and vi to me...tell me something interesting... thanx -- Timothy Dodge Bernhardt 207 ,Box 134, Moravian College, Bethlehem PA 18018 ------------ CSNET/INTERNET....dodgeT@moravian.edu ___________________ |The keeper of| UUCP......!rutgers!liberty!batman!dodgeT_|I would if i could |strange hours| In Bill Gates I Trust | i can't so i won't ----------------------------- From: Doug Gwyn Subject: Re: book request, want advice Keywords: unix books, non-trivial Date: 10 Aug 90 21:52:37 GMT To: info-unix@sem.brl.mil In article <1900@batman.moravian.EDU> dodgeT@batman.moravian.EDU (Asmodeus) writes: - I would like the net's advice on (a) good book(s) concerning -the non-trivial aspects of unix. I am already familiar w/many of the -commands...that is not a problem...what i want is a book that -details and explains many of the unix features that separate it from -the smaller operating systems. Ex.-> devices, virtual memory, perl, -other various shells...basically a good book that doesn't spend too much -time explaining every line-editor and vi to me...tell me something -interesting... Libes & Ressler, "Life With UNIX", would probably tell you much of what you want to know, but only at a survey level. For details you have to dig into lots of places. ----------------------------- From: Andrew Hume Subject: Re: reliable reads from pipes Date: 7 Aug 90 05:35:02 GMT To: info-unix@sem.brl.mil lest anyone start relying on reads returning whatever is in the pipe, 9th edition and later unices preserved the size of the writes which can now also exceed the size of the pipe buffer (i think). ----------------------------- From: "Karen C. Pichnarczyk" Subject: Re: Foo Bar Date: 8 Aug 90 18:31:37 GMT Sender: news@dftsrv.gsfc.nasa.gov To: info-unix@sem.brl.mil Foo Bar is derived from the abbreviation FUBAR: F: American English colloquialism for 'messed', or 'destroyed' ('nice' people don't use this language) U: Up B: Beyond A: All R: Recognition Karyn ***disclaimer: insert standard disclaimer here ----------------------------- From: Fredrik Stax{ng Subject: Re: KSH recommendations? Date: 9 Aug 90 18:58:48 GMT To: info-unix@sem.brl.mil In article <1990Aug08.113542.13266@iti.uucp> todd@iti.UUCP (maroC ddoT) writes: >In article larry@focsys.uucp (Larry Williamson) writes: >>I'd like to purchase a copy of the korn shell for ISC's Unix 2.2. >If you can't find a cheap korn shell, you may want to consider looking into >GNU's BASH (Bourne Again SHell). It has a lot of nice features that make the >korn shell worth while (including emacs & vi style command history editing). >Best of all.... it's free. And it works on 2.2. I got it up about a week ago. >Since ISC just added job control (to 2.2) you may want to keep in mind that >any korn shell compiled for an earlier ISC probally will not support any >job control. I have not tried to get job control to work yet. There is a bug in 2.2 that bit me. POSIX-compliant mode survives exec, so I had to put in a call to _setostype(0) before the exec. Also wait() in nojobs.c needed to be changed to waitpid(). Compile with -Xp. -- Fredrik Stax{ng | Unix is the last operating system. Any CS Student@Uppsala University | new will be strictly in the Unix tradition. fredriks@kuling.docs.uu.se | (+46 18) 46 32 07 | ----------------------------- From: Dennis Glatting Subject: Re: how to use diff files? Date: 9 Aug 90 19:53:36 GMT Followup-To: comp.unix.questions To: info-unix@sem.brl.mil In article <2044.26b890a2@miavx1.acs.muohio.edu> dastrout@miavx1.acs.muohio.edu (root@next1) writes: >This may be a silly question, but how do diff files work? specifically, >I want to upgrade g++ from 1.37.0 to 1.37.1. I ftp'ed the diff file, but >can't seem to get it to work. I tried ( cat fname.diff ; echo w) | ed >but that doesn't go. I would appreciate the responses, and will send a >summary to be included in the next Freq. Asked Q's. > there is a program called "patch". you can get it from uunet or osu. From adnan@sgtech.UUCP Fri Dec 1 05:38:51 1989 Path: kgw2!spca6!uccba!tut.cis.ohio-state.edu!usenet.ins.cwru.edu!hal!ncoast!sgtech!adnan From: adnan@sgtech.UUCP (Adnan Yaqub) Newsgroups: comp.sources.wanted Subject: osu-cis Archive [was Re: pathalias] Summary: Try the osu-cis archive for all your software needs. Message-ID: Date: 1 Dec 89 10:38:51 GMT References: <5006@quack.UUCP> Sender: adnan@sgtech.UUCP Distribution: comp Organization: Star Gate Technologies, Inc. Lines: 96 In-reply-to: mrapple@quack.UUCP's message of 29 Nov 89 23:01:43 GMT In article <5006@quack.UUCP> mrapple@quack.UUCP (Nick Sayer) writes: I don't know if this is the proper way to ask, but if it is, how can I get a copy of the pathalias program? Thanks in advance for any assistance. [I am doing a followup because the answer may help a lot of people.] There is an anonymous UUCP archive called osu-cis which has pathalias along with lots of other stuff (including the GNU software). Here is their "how to get" file (edited to save space). Call them up and grab your own copy of GNU.how-to-get. It will tell you how to get pathalias. I also recommend looking at their ls-lR.Z file. ----- -rw-rw-r-- 1 karl 28633 Nov 20 08:57 GNU.how-to-get This file (osu-cis!~/GNU.how-to-get) describes how to get the following software from osu-cis via semi-anonymous UUCP: C++ Test Suite Compress ET++ GNU /bin Utilities GNU Assembler GNU Awk GNU Bash GNU Bison GNU C++ Compiler GNU C++ Library GNU C Compiler GNU Chess GNU DBM GNU Debugger GNU Diff GNU Emacs GNU Emacs Ada support GNU Emacs Franz interface GNU Emacs Lisp Manual GNU Go GNU Gperf & Cperf GNU Grep GNU Indent GNU Lex GNU Make GNU Pins & Art GNU Plot & Plot2PS GNU Sed GNU Tar GNUS Ghostscript Gnews Ispell JOVE KA9Q Kermit Leif MIT C Scheme Mg2a NNTP News Oops PCRRN Patch Pathalias Protoize Proxy ARP RCS RFCs & IDEAS SB Prolog STDWIN Sendmail Smail Tcsh VM There's a lot of other available miscellany that isn't explicitly listed here. You can find out about it in the file osu-cis!~/ls-lR.Z The Computer and Information Science Department of the Ohio State University provides Free Software Foundation GNU products (and others) via UUCP only as a redistribution service. Anything found here is only and exactly as it would be found on the indicated Internet hosts, were one to acquire it via anonymous FTP (like we did); or else saved it as it flowed past on the Usenet source distribution newsgroups. OSU CIS takes no responsibility for the contents of any of the distributions described in this message. See the Distribution document (emacs/etc/DISTRIB when you unpack and build Emacs) and the GNU Emacs General Public License (emacs/etc/COPYING, similarly). Much of the GNU software is in beta-test. For a list of the current statuses (stati?), ask gnu@prep.ai.mit.edu for a copy of the latest FSF order form. How to reach osu-cis via uucp =============================== Here is a set of L.sys or Systems file lines suitable for osu-cis: # # Direct Trailblazer # osu-cis Any ACU 19200 1-614-292-5112 in:--in:--in: Uanon # # Direct V.32 (MNP 4) # osu-cis Any ACU 9600 1-614-292-1153 in:--in:--in: Uanon # # Micom port selector, at 1200, 2400, or 9600 bps. # Replace ##'s below with 12, 24, or 96 (both speed and phone number). # NOTE: 9600 bps Micom access may not yet be operational, or may be flaky. # osu-cis Any ACU ##00 1-614-292-31## "" \r\c Name? osu-cis nected \c GO \d\r\d\r\d\r in:--in:--in: Uanon Modify as appropriate for your site, of course, to deal with your local telephone system. There are no limitations concerning the hours of the day you may call. We are deeply grateful to Philips Components of Eindhoven, the Netherlands for the donation of a Trailblazer Plus and a Codex 2264 for use by the community at large. Where the files are =================== Most items exist on osu-cis for distribution purposes in compressed tar form, exactly what you find on the indicated hosts in the specified origin files. Most items are cut into pieces for the sake of uucp sanity. This separation helps if your uucp session fails midway through a conversation; you need restart only with the part that failed, rather than the whole beast. The pieces are typically named with a root word, followed by letter pairs like "aa" and "bj," meaning that the pieces are all named with the root word, followed by a dash and the suffixes indicated, using the letters inclusive between the two limits. All pieces but the last are 100,000 bytes long, and the fragmentary last piece has some smaller size. ----- -- Adnan Yaqub Star Gate Technologies, 29300 Aurora Rd., Solon, OH, USA, +1 216 349 1860 ...cwjcc!ncoast!sgtech!adnan ...uunet!abvax!sgtech!adnan -- -- dennisg@kgw2.bwi.WEC.COM | Dennis P. Glatting ..!uunet!tron!kgw2!dennisg | ----------------------------- From: skidrow@ceres.ucsc.edu Subject: Re: ftp in background? Keywords: ftp, background Date: 9 Aug 90 20:33:38 GMT Sender: usenet@darkstar.ucsc.edu To: info-unix@sem.brl.mil masticol@athos.rutgers.edu (Steve Masticola) writes: >I would like to ftp in several files from a remote site (using >anonymous ftp). The site is busy during most daylight hours, and even >when I can connect, the connection has been unreliable. Is there any >utility that can transfer files in background, and will retry on a >broken or uncompleted connection? >Thanks for your help, >- Steve (masticol@athos.rutgers.edu) Annette DeSchon has written a background FTP utility (BFTP) which you can use to repeatedly attempt to copy files over the net. BFTP features session logging to record errors, verification of transfer parameters prior to copying, and many other useful features. Really handy for connecting to ftp-servers in obscure foreign places, or overloaded servers with time/user limits. Available at gatekeeper.dec.com (pub/net) and most other PD-sites. There's an RFC that covers it. - Gary M. Lin skidrow@ceres.ucsc.edu ----------------------------- From: John Lacey Subject: Using Lex (and Yacc) on a string. Date: 10 Aug 90 01:29:27 GMT To: info-unix@sem.brl.mil Normally, of course, one wants a scanner (and a parser) to work from a file, perhaps stdin. Sigh. Well, I want one that works from a string. I am using Flex 2.3, and Bison 1.11. I tried the following few #define's: #undef YY_INPUT #define YY_INPUT(buf,result,max_size) \ { \ for ( result = 0; *ch_this && result < max_size; result ++ ) \ buf[result] = *ch_this++; \ } #define YY_USER_INIT \ if ( scan_init ) { \ if ( yy_flex_debug ) \ printf ( "-- initializing for scan %d\n", scan_init ); \ ch_this = inbuffer; \ scan_init = 0; } with the following couple of definitions and declarations in the scanner: static char * ch_this; extern char * inbuffer; extern int scan_init; and with inbuffer and scan_init defined in the code that calls yyparse(). This didn't work. Well, actually, it works the first time yyparse() is called, but not again. Now, YY_USER_INIT is used inside an if statement that checks yy_init, so I moved it out of there in the scanner skeleton so that YY_USER_INIT is seen every time the scanner is called. Still no go. Has anyone done this, or see a way to do it, or know a way to do it, or .... Thanks. -- John Lacey, E-mail: ...!osu-cis!n8emr!uncle!basho!john (coming soon: john@basho.uucp) V-mail: (614) 436--3773, or 487--8570 "What was the name of the dog on Rin-tin-tin?" --Mickey Rivers, ex-Yankee CF ----------------------------- From: Pat Broderick Subject: Re: Using Lex (and Yacc) on a string. Date: 10 Aug 90 14:41:51 GMT Followup-To: comp.lang.c To: info-unix@sem.brl.mil In article <1990Aug10.012927.5558@basho.uucp>, john@basho.uucp (John Lacey) writes: > Normally, of course, one wants a scanner (and a parser) to work from > a file, perhaps stdin. Sigh. Well, I want one that works from a string. > ... Recently I had occasion to do something similar. What we did was roughly as follows: - strings to be parsed are maintained in memory - to parse a string a global pointer known to lex is set to point at the beginning of the string - the input() macro was redefined in terms of this pointer (standard uses getc(yyin)) The things needed might look something like: LEX: # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar) /* standard defn from lex */ # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):(*yynyy++))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar) ^^^^^^^^^^ /* modified defn to use string */ extern char *yynyy; /* will pt to start of string */ Function invoking parser: char *yynyy; /* globally visible */ .... yynyy = start_of_string; yyparse(); This works fine for us, hope it helps. -- Patrick T. Broderick |ptb@ittc.wec.com | |uunet!ittc!ptb | |(412)733-6265 | ----------------------------- From: Lawrence Harris Subject: Need program to attach a pseudo tty to tcp/ip port Keywords: pty tcp/ip Date: 10 Aug 90 06:37:59 GMT To: info-unix@sem.brl.mil I have an emulex terminal server and want to be able to put a modem on one of the server ports. I have been able to put a printer on a port using a custom print filter that opens a tcp connection the the port and then copies standard in. What I need is a program that will attach itself between a pseudo tty and the terminal server port so that I can use 'cu' or 'kermit' to talk to the modem. This sound like something that should have been done before so I thought I would ask if some kind soul would send me a program that either will do the trick or act as an example. Thanks, Lawrence Harris ps. The system is running XENIX 386. ---------- UUCP: ubc-cs!van-bc!nvanbc!lawrence (home) ...!nvanbc!hcs!lharris (work) MAIL: 100 13511 Commerce Parkway, Richmond, B.C., Canada, V6V 2J8 PHONE: (604) 420-9518 (home), 273-490 (work), 273-2764 (fax) ----------------------------- From: "Jay A. Konigsberg" Subject: Re: Get process name w/o using argv[0] in C function? Date: 10 Aug 90 12:02:34 GMT To: info-unix@sem.brl.mil In article <837@hls0.hls.oz> george@hls0.hls.oz (George Turczynski) writes: >In article <13491@smoke.BRL.MIL>, gwyn@smoke.BRL.MIL (Doug Gwyn) writes: >> In article <1990Aug4.051827.16438@nbc1.ge.com> scott@nbc1.GE.COM (Scott Barman) writes: >> >I cannot think of one rational or even irrational reason *not* to use >> >global variables. >> >> Really? I thought this was commonly taught in structured software development >> courses. > >Yes, it is, as a principle, to discourage people from using >globals and no locals, as they might have gotten used to with >such things as BASIC. It develops the ideas of information >hiding and so on. > >The use of NO globals is however, only adopted by extremists. > Yes, this is correct. In fact, there are some cases where the only way to do something is *with* globals - though these situtations are rare, they do exist. Also, there are times when you want something to be global to a set of functions. For example the getch() & ungetch() functions in K&R where the buf[] and bufp vars are shared. Another case where globals are required involves the use of a signal catcher() routine. If this routine needs information other than the signal number, the only way to get it there is via a global (when invoked by catching the signal that is). The case where I used this was returning from "raw" to "cooked" char mode. The catcher() routine had to reset ICANON and a couple of termio.??? values to their original form. Accucally, if things like globals and the neferious "goto" were really _that_ bad, they wouldn't be included in the language. The fact of the matter is though, sometimes they are needed. Just have good and supportable reasons for using them. -- ------------------------------------------------------------- Jay @ SAC-UNIX, Sacramento, Ca. UUCP=...pacbell!sactoh0!jak If something is worth doing, its worth doing correctly. ----------------------------- From: "BURNS,JIM" Subject: Re: Get process name w/o using argv[0] in C function? Date: 11 Aug 90 02:34:58 GMT To: info-unix@sem.brl.mil in various articles by (Jay A. Konigsberg),(George Turczynski),(Doug Gwyn), & (Scott Barman): >>> >I cannot think of one rational or even irrational reason *not* to use >>> >global variables. >>> Really? I thought this was commonly taught in structured software development >>> courses. >>Yes, it is, as a principle, to discourage people from using >>globals and no locals, as they might have gotten used to with >>such things as BASIC. It develops the ideas of information >>hiding and so on. >>The use of NO globals is however, only adopted by extremists. > Yes, this is correct. [Discussion in defense of globals in certain cases.] I understood the current emphasis was on not MODIFYING globals in subroutines, as this is a side-effect, and can be hard to debug for future code maintainers, unless the usage of globals is carefully documented in comments sections. It's much cleaner to pass a global as a parameter than to let subs modify them (& some say even to access them, since later programmers may say "Well, I'm using it anyway - Why can't i modify it?"), since it's more obvious you intended for the sub to have access to the variable. The only time it is critical that subs not reference globals (other than system globals such as errno) is in canned library packages, which can't 1) be dependent on the proper global environment being correctly setup, and 2) use global names internally that may collide with global names you have defined. Of course, the classic text-book example on using globals for information hiding is in writing massage routines for a small internal database. All you want to do is pass the data/key to be operated on, and the operation itself. You do NOT want to pass around the data structures for the database itself, so that the massagers will be free to change the implementation when database growth demands a reorganization of data or access method. (If you pass n arrays as the database in every call to the massage routines, you have to track down every one of those calls if the database structure changes.) '#include'-ing the appropriate set of global 'extern's in only the massage routines hides the database structure from the rest of the program. And then you have (SysV) Fortran programmers like me that are working on parent/child programs (some 78 in my system) where the only efficient solution to data sharing is some sort of IPC. I'm defining my COMMON to be in shared memory (HP-UX). -- BURNS,JIM Georgia Institute of Technology, Box 30178, Atlanta Georgia, 30332 uucp: ...!{decvax,hplabs,ncar,purdue,rutgers}!gatech!prism!gt0178a Internet: gt0178a@prism.gatech.edu ----------------------------- From: Patrick Hertel Subject: Re:In defense of Larry WAS What's wrong with this Bourne shell script? Date: 10 Aug 90 12:43:55 GMT To: info-unix@sem.brl.mil In sum the argument is that when someone asks for a solution to a Bourne problem the answer should be Bourne. While I would agree in the case where the reply was made throgh e-mail a posting is also for the edification of the unwashed and alternate solutions should certainly be welcome. I see no purpose, within reason, in limiting replies. I apologize for a posting which is not really appropriate to this forum, I don't want to start a debate and detract from this newsgroup's real purpose. -- Pat Hertel Canadian Meteorological Centre Analyst/Programmer 2121 N. Service Rd. phertel@cmc.aes.doe.ca Dorval,Quebec Environment Canada CANADA H9P1J3 ----------------------------- From: Eduardo Krell Subject: Re: ksh question: what's the difference between [ ... ] and [[ ... ]] ? Keywords: ksh Date: 10 Aug 90 13:54:12 GMT Sender: netnews@ulysses.att.com To: info-unix@sem.brl.mil Answer from Dave Korn: The primary difference between [ and [[ is that [ is a command (equivalent to the test command), whereas [[ is part of the shell grammar. There are a few minor differences as well. In particular, [ uses -a and -o for and and or, whereas [[ uses && and || for this. Because [ is a command, all shell expansions are performed before the [ command is executed. The only way to distinguish between operators and operands is by the results of expansions. For example, [ "$1" ] can have several meanings that depend of the value of $1. If $1 is -t, then this is a test for a terminal. If $1 is of the form, -, where letter is one of the unary operators that require an operand, then this is an error. Otherwise, this evaluates to true when the string is not null. Note that the use of double quotes is critical with [ since otherwise it need not expand to a single argument which leads to unexpected results. There are many other anomalies with [. Here are a few: 1. To test string variables you have to precede the variable with a character that is not a - to prevent it being interpreted as an operator. 2. [ -f * ] tests the first file name and ignores the rest, unless the second name is -a, -o, or a binary operator such as =. 3. [ -f "$1" ] yields a syntax error when $1 is =. The [[...]] construct was added to ksh88 to overcome these problems. Since [[...]] is part of the shell, it can differenciate between operators and operands before expansion. (This means that the operators cannot be variable unless you use eval). In addition, word splitting and file name expansion are not performed inside [[...]] eliminating many of the most common scripting errors. Because no file expansion is done, pattern characters (*,? and [) can be used for string comparison. The [[...]] construct was in draft 8 of the IEEE 1003.2 shell and utilities standard, but was removed from draft 9 because it was felt that some of these problems could be fixed by eliminating compound operations, -a, -o, !, and () in test ([) from the standard and requiring that -t require an operand. The number of arguments could then determine which argument was an operator. Writing a compound command would requiring the use the && and || of the shell instead. The ! command was added to the shell grammar for this purpose. Unfortunately, there was no coordination between changes in test and the shell language so that the changes in test were never made and the [[...]] was not restored. Therefore, unless there is a change in future version of the standard, the [[...]] will remain a KornShell extension rather than part of the POSIX shell language. David Korn ulysses!dgk Eduardo Krell AT&T Bell Laboratories, Murray Hill, NJ UUCP: {att,decvax,ucbvax}!ulysses!ekrell Internet: ekrell@ulysses.att.com ----------------------------- From: Chris Davies Subject: Re: Working with sed Date: 10 Aug 90 14:23:41 GMT To: info-unix@sem.brl.mil In article <27372@unix.cis.pitt.edu> nr3m@unix.cis.pitt.edu (Matthew A Henry) writes: >I'm writing a script that uses sed, I'm assuming by this that you don't mean 'working with a sed script'. >and am having trouble with one >part. I have a file that contains typical unix paths, one per >line, and would like to remove everything after the last forward >slash (/). Why use sed? You've said you're using a script with sed in it, so why not use something different. On SysV and SunOS 4.0.3_EXPORT (therefore probably BSD systems in general??) you can use _d_i_r_n_a_m_e to do exactly what you require. >In other words I would like the string: > /aaa/bbb/ccc/ddd/eee >to be changed to: > /aaa/bbb/ccc/ddd Check out _b_a_s_e_n_a_m_e too. Thus, % dirname '/aaa/bbb/ccc/ddd/eee' /aaa/bbb/ccc/ddd/eee % basename '/aaa/bbb/ccc/ddd/eee' eee % Chris -- VISIONWARE LTD | UK: chris@vision.uucp JANET: chris%vision.uucp@ukc 57 Cardigan Lane | US: chris@vware.mn.org OTHER: chris@vision.co.uk LEEDS LS4 2LE | BANGNET: ...{backbone}!ukc!vision!chris England | VOICE: +44 532 788858 FAX: +44 532 304676 -------------- "VisionWare: The home of DOS/UNIX/X integration" -------------- ----------------------------- From: David Neill-OKCy Mktg 405-278-4007 Subject: Re: Working with sed Date: 10 Aug 90 17:43:33 GMT To: info-unix@sem.brl.mil >In article <27372@unix.cis.pitt.edu> nr3m@unix.cis.pitt.edu (Matthew A Henry) writes: >I'm writing a script that uses sed, >and am having trouble with one >part. I have a file that contains typical unix paths, one per >line, and would like to remove everything after the last forward >slash (/). sed -e 's/\/[^\/]*$//' filename -- name & address (this account) -> uunet!swbatl!dwn OR dwn@swbatl.sbc.com David Neill office -> 405-291-1990 -> uunet!swbatl!oktext!mktco Mgr - Mktg.(SWBTCo) home -> 405-749-1141 -> uunet!swbatl!oktext!frodo!david ----------------------------- From: David Davison Subject: Needed: "user friendly" batch job scheduler Keywords: batch job Date: 10 Aug 90 15:15:07 GMT To: info-unix@sem.brl.mil I have a need for a batch job scheduler that I can allow unsophisticated users to use. Menu driven would be great, fairly bulletproof, load leveling by time of day would be wonderful. Any suggestions would be appreciated. Environment is Sequent S81(2), unisys 6000 (20), harrix hcx(3). Please email replies to david@slammer.UUCP ...!gatech!bagend!slammer!david Standard disclaimers. ----------------------------- From: Dan_Jacobson@att.com Subject: article "Get Ready for GNU Software" in Computer World magazine Date: 10 Aug 90 16:21:42 GMT Sender: Dan Jacobson Followup-To: gnu.misc.discuss To: info-unix@sem.brl.mil There's a 1/2 page article "Get Ready for GNU Software," in Computer World magazine, Aug. 6, 1990, page 102, by Simson L. Garfinkel. Quotes: "...Stallman, who by many accounts may be the world's best programmer." "...GNU Emacs, is becoming the standard Unix programmer's editor." "...Stallman was awarded a $240,000 ``Genius Grant'' from the MacArthur Foundation." -- Dan_Jacobson@ATT.COM +1-708-979-6364 ----------------------------- From: Maarten Litmaath Subject: Re: Suid script security Date: 10 Aug 90 16:34:52 GMT Sender: news@cs.vu.nl To: info-unix@sem.brl.mil In article <14920003@hpdmd48.boi.hp.com>, markw@hpdmd48.boi.hp.com (Mark Wolfe) writes: )... ) 1) Just what are the security risks involved? (i.e. how would someone attack ) a system via one of these). See below. ) 2) What can I do to make this as secure as possible? Convert it to a C program or use the indir(1) package I wrote (or something equivalent). It's in one of the latest volumes in comp.sources.unix. ------------------------------------------------------------------------------- Setuid Shell Scripts -------------------- how to get them safe Maarten Litmaath (maart@cs.vu.nl) Consider a setuid root shell script written in Bourne shell command language and called `/bin/powerful'. The first line of the script will be (without indentation!): #!/bin/sh If it doesn't begin with such a line, it's no use to chmod it to 6755 or whatever, because in that case it's just a shell script of the `old' kind: the Bourne shell receives an exec format error when trying to execute it, and decides it must be a shell script, so it forks a subshell with the script name as argument, to indicate from which file the commands are to be read. Shell scripts of the `new' kind are treated as follows: the kernel discovers the magic number `#!' and tries to execute the command interpreter pointed out, which may be followed in the script by 1 argument. Before the exec of the interpreter the uid and gid fields somewhere in the user structure of the process are filled in. Setuid script scheme (kernel manipulations faked by C routines): execl("/bin/powerful", "powerful", (char *) 0); | V setuid(0); setgid(0); /* possibly */ execl("/bin/sh", "sh", "/bin/powerful", (char *) 0); Now, what if the name of the very shell script were e.g. "-i"? Wouldn't that give a nice exec? execl("/bin/sh", "sh", "-i", (char *) 0); So link the script to a file named "-i", and voila! Yes, one needs write permission somewhere on the same device, if one's operating system doesn't support symbolic links. What about the csh command interpreter? Well, 4.2BSD provides us with a csh which has a NEW option: "-b"! Its goal is to avoid just the thing described above: the mnemonic for `b' is `break'; this option prevents following arguments of an exec of /bin/csh from being interpreted as options... The csh refuses to run a setuid shell script unless the option is present... Scheme: #!/bin/csh -b ... execl("-i", "unimportant", (char *) 0); | V setuid(0); setgid(0); execl("/bin/csh", "csh", "-b", "-i", (char *) 0); And indeed the contents of the file "-i" are executed! However, there's still another bug hidden, albeit not for long! What if I could `get between' the setuid()/setgid() and the open() of the command file by the command interpreter? In that case I could unlink() my link to the setuid shell script, and quickly link() some other shell script into its place, couldn't I? Right. Yet another source of trouble for /bin/sh setuid scripts is the reputed IFS shell variable. Of course there's also the PATH variable, which might cause problems. However, one can circumvent these 2 jokers easily. A solution to the link()/unlink() problems would be the specification of the full path of the script in the script itself: #!/bin/sh /etc/setuid_script shift # remove the `extra' argument ... Some objections: 1) currently the total length of shell + argument mustn't exceed 32 chars (easily fixed); 2) 4.[23]BSD csh is expecting a `-b' flag as the first argument, instead of the full path (easily fixed); 3) the interpreter gets an extra argument; 4) the difficulty of maintaining setuid shell scripts increases - if one moves a script, one shouldn't forget to edit it... - editing in turn could turn off the setuid bits, so one shouldn't forget to chmod(1) the file `back'... - conceptually the solution above isn't `elegant'. How does indir(1) tackle the problems? The script to be executed will look like: #!/bin/indir -u #?/bin/sh /etc/setuid_script ... Indir(1) will try to open the script and read the `#?' line indicating the real interpreter and a safe (absolute) pathname of the script. But remember: the link to the script might have been quickly replaced with a link to another script, i.e. how can we trust this `#?' line? Answer: if and only if the file we're reading from is SETUID (setgid) to the EFFECTIVE uid (gid) of the process, AND it's accessible and executable for the REAL uid (gid), we know we're executing the original script (to be 100% correct: the original link might have been replaced with a link to ANOTHER accessible and executable setuid (setgid) script of the same owner (group) -> merely a waste of time). To check the condition stated above reliably, we use fstat(2) on the file descriptor we're reading from, and stat(2) on the associated file name. We compare inode and device numbers to make sure we're talking about the same file. Can you figure out why using stat(2) alone would be insecure? Feature: we always check if the REAL uid (gid) has access to the setuid (setgid) script, even if the effective id already differed from the real id BEFORE the script was executed. (There isn't even a way to find out the original effective id.) If you want the original effective id to be used, you should set the real id accordingly before executing the script. To deal with IFS, PATH and other environment problems, indir(1) resets the environment to a simple default: PATH=/bin:/usr/bin:/usr/ucb When you need e.g. $HOME, you should get it from /etc/passwd instead of trusting what the environment says. Of course with indir(1) problem 4 remains. -------- -- "UNIX was never designed to keep people from doing stupid things, because that policy would also keep them from doing clever things." (Doug Gwyn) ----------------------------- From: Vicki Brown Subject: Re: Suid script security Date: 10 Aug 90 19:41:32 GMT Sender: usenet@apple.com Sender: To: info-unix@sem.brl.mil In article <14920003@hpdmd48.boi.hp.com> markw@hpdmd48.boi.hp.com (Mark Wolfe) writes: > > I know that suid scripts are a bad idea from reading comp.questions and >comp.wizards over the last year or so. It seems that just about every guru >in the world has posted a warning NOT to do it, so I decided I would follow >the advice (it's a rare subject that all guru's agree on). However, it appears >that I'm now about to have one of these ugly animals forced on me from above, >so I'd like some advice: > > 1) Just what are the security risks involved? (i.e. how would someone attack > a system via one of these). > > 2) What can I do to make this as secure as possible? Warning - very long response ahead. Proceed at your own risk. There was a very interesting paper in the USENIX Association's publication, ;login: ( "How To Write a Setuid Program", Matt Bishop, ;login: Vol 12, Number 1, January/February 1987). An excerpt: Some versions of UNIX allow command scripts, such as shell scripts, to be made setuid ... Unfortunately, given the power and complexity of many command interpreters, it is often possible to force them to perform actions which were not intended, and which allow the user to violate system security. This leaves the owner of the setuid script open to a devastating attack. In general, such scripts should be avoided. ... suppose a site has a setuid script of sh commands. An attacker simply executes the script in such a way that the shell ... appears to have been invoked by a person logging in. UNIX applies the setuid bit on the script to the shell, and ... it becomes interactive... One way to avoid having a setuid script is to turn off the setuid bit on the script, and ... use a setuid [binary] program to invoke it. This program should take care to call the command interpreter by its full path name, and reset environment information such as file descriptors and environment variables to a known state. However, this method should be used only as a last resort and as a temporary measure, since with many command interpreters it is possible even under these conditions to force them to take undesirable action. The biggest problem with shell scripts is that you (the programmer / administrator) have very little control over the programs which run within the script. As a very real example, I ran across a script which allowed users to enter bug reports, using the "vi" editor. The script was setuid root, because it wanted to save files in funny places. The programmer had guarded against shell escapes (a known feature of vi), by making this script the login shell. However, he couldn't guard against another feature :e /etc/passwd You can attempt to make your script as safe as possible by 1) being very restrictive in your choice of UID. That is, make the script setuid for a non-privileged user, rather than root (for example, if it must write a log file, could the log file live in some locked area, accessed only by a new and otherwise non-privileged account?) 2) making the script setgid rather than setuid, with a very restricted GID (see #1) 3) ensuring that the script is short, very simple, and does not make use of commands such as `vi', `mail' or anything interactive. setuid programs should do ONE thing only, and in a non-complex manner. 4) setting the PATH, IFS, and other environment variables explicitly within the script 5) locking down the permissions on the script. If possible allow it to be run only by group members. Never allow write permission. 6) If your version of UNIX permits, take away read permission for anyone other than the owner. It's a bit harder to break something if you can't see how it works. 7) Rewrite it in C (carefully) 8) Convince your management that they don't really need this. If you plan to keep the script, or re-write it, try and get a copy of the paper. If you can't find it, send me mail. Vicki Brown A/UX Development Group Apple Computer, Inc. Internet: vlb@apple.com MS 58A, 10440 Bubb Rd. UUCP: {sun,amdahl,decwrl}!apple!vlb Cupertino, CA 95014 USA Ooit'n Normaal Mens Ontmoet? En..., Beviel't? (Did you ever meet a normal person? Did you enjoy it?) ----------------------------- From: Rob Bunten Subject: SUMMARY: finding disk usage of partitions Date: 10 Aug 90 17:07:16 GMT To: info-unix@sem.brl.mil Thanks for the responses to my original request for the disk usage of directories, not including stuff mounted from other partitions. The responses were from: xie@math.arizona.edu suggested using df(1) :-) dietrich@cernvax.cern.ch sent a program which is used to determine the number of files and directories and the occupied disk space in a file hierarchy beginning at startdirectory. I have the source, but haven't managed to get it to run on SunOS. meissner@osf.org mentions that the gnu fileutils 1.3 package contains a du rewrite that adds a -f option to prevent du from crossing filesystem boundaries. tmdg@ti.co.uk has a program that reports file fragmentation that could possibly be adapted. eirik@elf.tn.cornell.edu suggested the following (this is what I used): Apparently you want a way to tell du not to cross mount points; if not, I am probably answering a different question than the one you asked. It also sounds like you are ignoring all but local partitions. Assuming you have root permissions on the machine with the disks, there is a way of doing what you want. It is, in a sense, cheating, but I'd rather cheat than lose. :-) Here's the idea: export all file systems you're interested in to localhost, and mount them via NFS. As an example, the following shows the usage in my root partition: exportfs -i -o root=localhost,access=localhost / mount -n localhost:/ /mnt du /mnt mount -f localhost:/ /mnt umount /mnt chip@chinacat.unicom.com has written a du reimplementation. It is more oriented towards the SysV world, but it might be usable. paul@ixi-limited.co.uk suggests: find / -fstype nfs -prune -o -type f -exec du -s {} \; | \ awk ' { total = total + $1 } END { print total }' However, this doesn't do quite what I wanted, as I wanted the totals for each directory. Sorry for the delay in summarizing (the original posting was on 4th July). ----------------------------- From: QQ11@liverpool.ac.uk Subject: HP-UX 7.0 problems with ps(1) and awk(1) in pipe Date: 10 Aug 90 17:32:04 GMT To: info-unix@sem.brl.mil I have a simple csh script which ran without any problems at HP-UX 3.1 on our 9000/850. However at 7.0 the behaviour is different. The different behaviour has proved consistent enough for me to seek help from you. The script fetches a file from another system every 24 hours and the script is started by cron(1M). The process waits until the file arrives. If for some reason the transfer has not taken place 24 hours later, I want the earlier process killed. The following line of code is used to find the old PID. set exists=`ps -uqq11 | awk '$4 == "getus.csh" && $1 != x { print $1 }' x=$$ -` This looks for the PIDs of the program and finds the older one if it exists (if it is found kill(1) is used). This worked fine at HP-UX 3.1 but at 7.0 a "spurious" PID is found (presumably as a result of executing part of the above pipe). The resulting kill(1) fails since the process is already dead. Here is output of ps -uqq11 in same script before the pipe: 11752 ? 0:00 sh 11942 ? 0:00 ps 11764 ? 0:00 getus.csh I would be grateful if any HP-UX 7.0 guru can explain precisely what is happening i.e. why does the other process get included at 7.0 and not at 3.1 (for 9000/300 fans, HP-UX 3.1 on the 800 was similar to 6.5 on the 300s). While I'm aware that I can do the whole thing differently (send *good* suggestions to me if you want :-)), I'd like to get to the root of the problem. Thanks. Alan Thew University of Liverpool Computer Laboratory Bitnet/Earn: QQ11@LIVERPOOL.AC.UK or QQ11%UK.AC.LIVERPOOL @ UKACRL UUCP : ....!mcsun!ukc!liv!qq11 Voice: +44 51 794 3735 Internet : QQ11@LIVERPOOL.AC.UK or QQ11%LIVERPOOL.AC.UK @ NSFNET-RELAY.AC.UK ----------------------------- From: Bob Palowoda Subject: rexecd for ESIX? Date: 10 Aug 90 17:54:03 GMT To: info-unix@sem.brl.mil Has anyone have a working example of rexecd for ESIX? Specificly I am looking for one based off of 4.3 tahoe. ---Bob -- Bob Palowoda palowoda@fiver | *Home of Fiver BBS* Home {sun}!ys2!fiver!palowoda | 415-623-8809 1200/2400 {pacbell}!indetech!fiver!palowoda | An XBBS System Work {sun,pyramid,decwrl}!megatest!palowoda| 415-623-8806 1200/2400/19.2k TB+ ----------------------------- From: Guy Harris Subject: Re: help sought - securing a terminal/line Date: 10 Aug 90 18:29:46 GMT To: info-unix@sem.brl.mil >You're saying V.4 doesn't use inittab? I'm saying it doesn't necessarily run "getty" out of "inittab". >Um, this is not good. The flexibility of inittab has been very helpful. I >don't want to go back to kludging a login or getty front-end again. Um, this is not good. You're making some inferences that aren't justified based purely on what I said, and that aren't, in fact, correct.... "ttymon" will listen on a whole bunch of ports, and spin off a process when the port comes up. The process can run whatever program you want it to. You can also run "getty" out of "inittab", if you want to, or any other program. >What else does V.3.2 have that V.4 hasn't? A shared library mechanism that requires you to explicitly ask for the shared version of a library, for one thing.... (S5R4's, like the SunOS 4.x one from which it's derived, gives you the shared library by default if there is one.) Go buy the S5R4 documentation - or some subset thereof, the entire documentation set is rather expensive and only crazy completists like me buy it out of our own pockets. ----------------------------- From: Guy Harris Subject: Re: help sought - securing a terminal/line Date: 10 Aug 90 18:32:49 GMT To: info-unix@sem.brl.mil >Fear not; the V.4 init still understands inittab. All Guy was >referring to was the advent of ttymon, a STREAMS-based tty port >monitor that provides a more convenient way to deal with terminals >than the old inittab method. And also gives you a few additional bells and whistles, such as autobauding (not the bit where you hit BREAK to get it to cycle through speeds, although "ttymon" does support that, but the bit where you type a character and, based on what the character looked like, "ttymon" guesses the speed of the line; same sort of thing as the 4.[23]BSD "getty" supports). It does permit you to run some program other than "login" on some port when it comes up. ----------------------------- From: "BURNS,JIM" Subject: Re: help sought - securing a terminal/line Date: 11 Aug 90 01:20:33 GMT To: info-unix@sem.brl.mil in article <2103.26bf3e39@miavx1.acs.muohio.edu>, pemurray@miavx1.acs.muohio.edu (Peter Murray) says: > In article <1990Aug7.111611.434@warwick.ac.uk>, cudcv@warwick.ac.uk (Rob McMahon) writes: >> Assuming we're talking BSD here (that certainly looks like a 4.3 /etc/ttys >> file to me ...), can't you just use the `lo' gettytab entry for this: >> lo str /usr/bin/login program to exec when name obtained > Yes, I'm dealing with BSD (Ultrix, to be exact). Umm, the original poster (Tony Rhodes?) specifically asked for an HP-UX solution. In that case, altho' /etc/ttys exists, /etc/inittab would be the most appropriate solution since it avoids getty clones, and allows you to automatically respawn the app. [Oracle, etc.] if it aborts. One possible disadvantage is stty settings may not be correct if getty/login don't run first. (I've been bit by this on HP-UX.) However, since the original poster mentioned the need for several different Oracle apps., this could be handled by embedding the appropriate command tail option in a script that also runs stty (, and probably should also do something like 'trap "exit" 2 3' to prevent breaking out before Oracle starts - the inittab respawn will then restart it). At a minimum on HP-UX, you will need to do an 'stty icrnl ocrnl ixon'. One more point - as of HP-UX 7.0 (6.5?) if you need to do a set[gu]id on the script, the first line MUST be '#!/bin/ksh' (or what ever shell you want). -- BURNS,JIM Georgia Institute of Technology, Box 30178, Atlanta Georgia, 30332 uucp: ...!{decvax,hplabs,ncar,purdue,rutgers}!gatech!prism!gt0178a Internet: gt0178a@prism.gatech.edu ----------------------------- From: Guy Harris Subject: Re: C-shell programming Keywords: csh, multiple file input Date: 10 Aug 90 18:45:22 GMT To: info-unix@sem.brl.mil >Appropriate use of /dev/fd could make it even neater, if you don't already >have sorted files. And if you *do* have "/dev/fd", which most UNIX systems at this point don't have, although I think S5R4 might have it. ----------------------------- From: Guy Harris Subject: Re: How to tell if a process exists Date: 10 Aug 90 18:53:25 GMT To: info-unix@sem.brl.mil > Hmmm -- must be running Reverse Polish Unix down under, 'cause my >manual sez: " kill [-sig] processid... ", and I've been doing it that way >for a looooooooong time. He was referring to the "kill()" library routine, not the "kill" command.... ----------------------------- From: Vicki Brown Subject: Re: How to tell if a process exists Date: 10 Aug 90 19:44:33 GMT Sender: usenet@apple.com Sender: To: info-unix@sem.brl.mil In article <7733@amelia.nas.nasa.gov> samlb@pioneer.arc.nasa.gov.UUCP (Sam Bassett RCS) writes: >In article <1823@necisa.ho.necisa.oz> boyd@necisa.ho.necisa.oz (Boyd Roberts) writes: >>Wrong. RTFM -- kill(pid, 0) > > Hmmm -- must be running Reverse Polish Unix down under, 'cause my >manual sez: " kill [-sig] processid... ", and I've been doing it that way >for a looooooooong time. > > What kind of UNIX _are_ you running?? ---> C <--- ( man 2 kill 8^) Vicki Brown A/UX Development Group Apple Computer, Inc. Internet: vlb@apple.com MS 58A, 10440 Bubb Rd. UUCP: {sun,amdahl,decwrl}!apple!vlb Cupertino, CA 95014 USA Ooit'n Normaal Mens Ontmoet? En..., Beviel't? (Did you ever meet a normal person? Did you enjoy it?) ----------------------------- From: Doug Gwyn Subject: Re: How to tell if a process exists Date: 10 Aug 90 21:47:42 GMT To: info-unix@sem.brl.mil In article <7733@amelia.nas.nasa.gov> samlb@pioneer.arc.nasa.gov.UUCP (Sam Bassett RCS) writes: -In article <1823@necisa.ho.necisa.oz> boyd@necisa.ho.necisa.oz (Boyd Roberts) writes: ->Wrong. RTFM -- kill(pid, 0) - Hmmm -- must be running Reverse Polish Unix down under, 'cause my -manual sez: " kill [-sig] processid... ", and I've been doing it that way -for a looooooooong time. Doing what, incorrectly reading your manual? ----------------------------- From: Terry Laskodi Subject: Re: How to tell if a process exists Date: 10 Aug 90 22:16:13 GMT Sender: news@osf.org To: info-unix@sem.brl.mil In article <7733@amelia.nas.nasa.gov> samlb@pioneer.arc.nasa.gov.UUCP (Sam Bassett RCS) writes: >In article <1823@necisa.ho.necisa.oz> boyd@necisa.ho.necisa.oz (Boyd Roberts) writes: >>Wrong. RTFM -- kill(pid, 0) > > Hmmm -- must be running Reverse Polish Unix down under, 'cause my >manual sez: " kill [-sig] processid... ", and I've been doing it that way >for a looooooooong time. > > What kind of UNIX _are_ you running?? Well, you're both right. Boyd was describing kill(2); Sam was describing kill(1)..... ----------------------------- From: Mike Verstegen Subject: make's usage of VPATH Keywords: make VPATH Date: 10 Aug 90 20:30:19 GMT Sender: mdv@comtst.uucp To: info-unix@sem.brl.mil A recent posting's comment about VPATH in make prompted me to use strings(1) to check our make to see if our makes were configured with this feature. Both of our systems' (3B2 V.3.1 and ISC 2.0.2) makes had the text VPATH in them. Then, using the documentation for nmake, I tried to get VPATHs to work. Unfortuanately, it did not. Either I don't understand VPATH as used in make, or make doesn't understand what I'm asking for. What I think VPATHs do is to provide alternate locations from source files in make's dependency analysis. For example, if I'm working on a project and I want to try out a private modification I could do the following: Directory contents: /u/official.d work.d ============= ====== foo.c foo.c bar.c Makefile contents: OBJ=foo.o bar.o fubar: $(OBJ) cc -o fubar $(OBJ) Commands executed: cd work.d VPATH=.:/u/official.d # also tried putting this in Makfile, no change export VPATH make foobar Results: Make: Don't know how to make bar.o. Stop. I think (acutally I thought): make would look in work.d and see foo.c in . (the first component in VPATH) and compile to foo.o as usual [it did]. Then, it would look for bar.c in . and see that it was not there. make would then look in /u/offical.d (the next component in VPATH), see it there, and use that as the file for complication [it did not]. Since VPATH is not a doucmented feature (at least that I can find) I know I cannot expect it to work, though I really would like this capability. I would appreciate any feedback on whether what I have described above is a correct expection and, if so, why doesn't it work? If it's not supposed to work (i.e. VPATH was there just to fool people like me), maybe I'll try to track down nmake which claims to support this feature. Please e-mail replies and I'll summarize if there is enough interest. -- Mike Verstegen ..!uunet!comtst!mdv mdv@domain.com ----------------------------- From: Randal Schwartz Subject: Re: Printer Accounting File Parsing Date: 10 Aug 90 22:37:46 GMT Sender: news@iwarp.intel.com To: info-unix@sem.brl.mil In article <24110@adm.BRL.MIL>, BKEHOE%widener writes: | | Here's something that should be simple to solve..it can be in anything (C/ | awk/shell/whatever). | I need to parse down the results of the printer accounting file into a total | for each user for that 2-week or month-long period of time, and send mail to | those users that've gone above 50 pages saying something like "Calm down". | I've been futzing in awk but can't seem to pull it off -- and in C my string | manipulation seems to be off (admittedly I haven't spent a *lot* of time | hacking it out). | Oh, I'm running SunOS 4.0.3 if yer interested. Here's what the file typically | looks like: | | --cut-- | 2.00 laverne:brendan | 3.00 shirley:quairoli | 17.00 laverne:doan | 1.00 sabrina:neveln | 5.00 laverne:jennifer | 9.00 ashley:ware | --cut-- | It'd be nice if I could assess the # of pages they print off of each client | too, but that may be overkill. | Thanks for your help.. Good that you said "whatever", so I won't get flamed for using Perl... ================================================== #!/usr/bin/perl while (<>) { ($pages,$host,$user) = /^\s+(\S+)\s+(\S+):(\S+)$/; $usertotal{$user} += $pages; $hosttotal{$host} += $pages; } print "Total by user:\n"; for (sort keys usertotal) { printf "%20s %5d\n", $_, $usertotal{$_}; } print "Total by host:\n"; for (sort keys hosttotal) { printf "%20s %5d\n", $_, $hosttotal{$_}; } ================================================== Season to taste. Just another Perl hacker, -- /=Randal L. Schwartz, Stonehenge Consulting Services (503)777-0095 ==========\ | on contract to Intel's iWarp project, Beaverton, Oregon, USA, Sol III | | merlyn@iwarp.intel.com ...!any-MX-mailer-like-uunet!iwarp.intel.com!merlyn | \=Cute Quote: "Welcome to Portland, Oregon, home of the California Raisins!"=/ ----------------------------- From: Larry Wall Subject: Re: Printer Accounting File Parsing Date: 11 Aug 90 00:02:38 GMT To: info-unix@sem.brl.mil In article <24110@adm.BRL.MIL> BKEHOE%widener@pucc.princeton.edu writes: : : Here's something that should be simple to solve..it can be in anything (C/ : awk/shell/whatever). : I need to parse down the results of the printer accounting file into a total : for each user for that 2-week or month-long period of time, and send mail to : those users that've gone above 50 pages saying something like "Calm down". : I've been futzing in awk but can't seem to pull it off -- and in C my string : manipulation seems to be off (admittedly I haven't spent a *lot* of time : hacking it out). : ... : It'd be nice if I could assess the # of pages they print off of each client : too, but that may be overkill. No problem. ---------- CUT HERE ---------- #!/usr/bin/perl $THRESHOLD = 50; while (<>) { ($pages, $wherewho) = split(' '); ($where, $who) = split(/:/, $wherewho); $sum{$who} += $pages; $client{$who} .= "$where " unless $clientsum{$wherewho}; $clientsum{$wherewho} += $pages; } foreach $who (keys %sum) { next if $sum{$who} < $THRESHOLD; @clients = sort split(' ', $client{$who}); $breakdown = ''; if (@clients >= 2) { $breakdown = "Breakdown:\n\tMachine \tPages\n"; foreach $client (@clients) { $breakdown .= sprintf("\t%-16s%5d\n", $client, $clientsum{"$client:$who"}); } } open(MAIL,"|/bin/mail $who") || die "Can't run mail: $!\n"; print MAIL < Subject: Re: backing up an entire unix/xenix system Keywords: Backup Date: 10 Aug 90 22:19:11 GMT Followup-To: comp.unix.xenix To: info-unix@sem.brl.mil In article <4@icdi50.UUCP> steve@icdi50.UUCP (Steve M. Ciarciello) writes: >Does anybody know of a utility that will back up an entire disk drive to >streaming tape under SCO Xenix or Unix. >The utility that I would like to have would allow the end user to backup >every block of the disk thereby allowing a complete disk restore from the >tape. This would therefore include the operating system and all filesystems. >I ask this question because I come from a world of mini computers that would >backup everything. A restore of the entire system from this type backup was >Steve Ciarciello >CompuData, Inc. >Philadelphia, PA This is a common problem. Using tar and the like will only give you mixed results. You must be very careful. We have been using CTAR from MicroLite with EXCELLENT results. It does a complete backup of ALL files including character, fifo, etc. It also comes with a utility to create a rootable/bootable floppy. This creates all the necessary utilities, and YOUR kernel and device drivers so that if you have a crash. 1. Replace disk 2. Boot up from rootable/bootable CTAR disk 3. Pick NEW Disk (format and all done) 4. Restore option (use most recent tape) 5. Reboot system and you are up and running. Much easier that the horse X#$% you have to do using tar, and reinstalling Unix/Xenix. You can reach MicroLite on uunet!mlite!info uunet!mlite!tom We have this installed at ALL customer sites and would not leave home without it. We consider it a mandatory option. Hope this helps. -- >.. CCS Enterprises, Inc. .. Bob Willey, CDP ..< >.. P.O. Drawer 1690 .. uunet!consult!bob ..< >.. Easton, Maryland 21601 .. (301) 820-4670 ..< >.......................BBS: (301) 476-5098.....................< ----------------------------- From: Ken Boi Subject: AWK Language Question Date: 10 Aug 90 22:25:24 GMT Sender: news@richsun.cpg.trs.reuter.com To: info-unix@sem.brl.mil According to the book "The AWK Programming Language", there are built-in string functions. One of them is 'gsub'. I have tried using it with the following comand line statement which is very close to the example in the book: awk '{ gsub(/USA/, "United States"); print }' awkdata where 'awkdata' is any text file. I get the error messages: awk: syntax error near line 1 awk: illegal statement near line 1 Anybody know why? ----------------------------- From: NRAO Array Operations Center Subject: permissions and parameters on terminal line Date: 10 Aug 90 23:01:05 GMT Sender: Ruth Milner To: info-unix@sem.brl.mil I have a user with a device attached to a serial line which he is writing a program to talk to. The problem is this: I don't particularly want to install his program setuid root, so how do I get the system to set the ownership of the terminal device at boot time so that it will stay that way as long as the system is up? Currently, every time he runs the program he has to first run something I gave him the change the ownership, and then after his program finishes the device reverts to root. Running a daemon on the line is not a nice solution, either, since if it dies for some reason the same problem crops up. Ideally I would like to be able to say something in /etc/rc.local like: chown -permanent him /dev/tty1c stty -permanent 4800 raw /dev/tty1c Obviously these commands won't work, but is there something else in stock UNIX which will? init won't work because every time it wakes up it interferes with his program; I have had to turn it off on that line. The system is a Solbourne 5/801 (SPARC CPU chip) running OS/MP 4.0c (= SunOS 4.0.3). Thanks in advance. Please reply by email and I will post the final solution. -- Ruth Milner Systems Manager NRAO/VLA Socorro NM rmilner@zia.aoc.nrao.edu ----------------------------- From: william n bell Subject: Emacs Date: 11 Aug 90 00:50:06 GMT Sender: news@acsu.buffalo.edu Nntp-Posting-Host: lictor.acsu.buffalo.edu To: info-unix@sem.brl.mil Who can I contact to get a Unix version of emacs? Is it public domain?? WHere can I find it?? Send email. Thanks. -- Out Of Touch BBS - 716-825-4268 from 8pm-8am! FIDO 1:260/170... Online games! ----------------------------- From: "here kitty, kitty..." Subject: Demented question -- anyone retargeted yacc for nawk? Date: 11 Aug 90 01:12:15 GMT To: info-unix@sem.brl.mil After doing a bunch of programming in nawk recently, I found myself wondering if anyone has retargeted a yacc-like parser generator for awk. I don't know how useful this would be, but it has potential amusement value [much like Roger Rohrbach's lisp written in old-awk]. It might also be handy for prototyping "little languages" you don't want to do via recursive descent. from right field, -dB "Bottom of the 4th, Cooper pitching" - tibetan baseball David Brower: daveb@rtech^H^H^H^H^Hingres.comd ----------------------------- From: James Brister Subject: Timeout on shell command. Date: 11 Aug 90 02:24:33 GMT Sender: News X-Checksum-Snefru: 8b1c0fca 68a8627c 3a923ed5 0f83a013 To: info-unix@sem.brl.mil I'd like to have a shell script run a command, but if that command doesn't finish in X seconds, then the script should kill it, if the command finishes sooner then the script should immediately continue. Any ideas on how one could achieve this? Thanks James -- James Brister brister@decwrl.dec.com DEC Western Software Lab. .....!decwrl!brister "Politics is comedy with pretense" -- Mark Alan Stamaty ----------------------------- End of INFO-UNIX Digest ***********************