ADMIN CGI PACKAGE version 0.1

German Version
 
Contents  

Description  

Installation  

Configuration  

Usage  

Copyright  

License  
  
  
  

Visit my Home! 
 


  

Description  

This package is a collection of various cgi-programms to make administrators live more easier. All scripts are SHELL-Scripts! That means, they are possibly slow, and that something could be made in another way. Feel free, if you want, to rewrite the scripts with another language, i.e. perl.
The package is distributed under the terms of the GNU General Public License (GPL)- you can modify and redistribute them, but you have to do this under the GPL too. The GPL is attached to this file. If anyone modifies the scripts, please drop me an line: tom@daemon.de

What can you do with these scripts? You can create users, edit some properties of a user, delete a user, and so on - all you have to do to manage your users. A complete description of every function are described below in the "usage"-section.
It creates automatically a backup of all affected files, ones a day or every time it runs. It creates also a "lock"-file, this avoids errors during editing of files if the script is used by more then one person in the same time.

Please read this documentation carefully. This package is in version 0.1! Don't forget that. I wrote it in a few nights to 1. test, what is possible with shell-programming, and 2. because I have needed a application like this, but I had not the time to write a big C++ programm with a lot of pointer-errors and some days of debugging...

Because of this, I can't give you any guarantie for this package or the results of its usage. Please make a complete backup of your user-files. Open a root-terminal and let it open during testing - so you can repair your system, when any fatal errors damaged it!
 




Installation  

First you have to unpack the archive with the following command.

gzip -cd admin-cgi.tar.gz | tar xf -  
  
A new directory is now created with the name admin-cgi. In this directory the following files will be located:

  • display.cgi - the mainprogramm, displays the currently installed users and provide you any options, like creating a new user or viewing some data
  • edit.cgi - edits the properties of a user
  • chpasswd.cgi - changes the password of a user
  • newuser.cgi - creates a new user
  • modify.cgi - will called from the other scripts, this one does the job
  • modifi_min.cgi - the same, but Mail or Aliases files are not affected
  • deluser.cgi - deletes user (!)
  • deluser_min.cgi - the same, but Mail or Aliases files are not affected
  • showfiles.cgi - shows all edited files like they currently really looks
  • showlistmembers.cgi - shows users in the mailinglist
  • showconfig.cgi - shows config.sh
  • showdocu.cgi - shows this documentation
  • config.sh - config-file for Admin CGI
  • mkpasswd.c++ - programm for encryption of passwords
  • proccgi.c - programm for parsing of cgi-output (from Frank Pilhofer, Thanks!)
  • create_login.cgi - creates a login for httpd authentication (buildin capability of apache webserver)
After unpacking the archive you have to compile the two C/C++ programms:
g++ mkpasswd.c++ -o mkpasswd 
gcc proccgi.c -o proccgi 

Now, create in your cgi-bin a subdirectory for admin cgi, i.e. "admin". Copy all files to this new directory, make sure, that your server has the right to execute programms in this subdirectory. Protect the subdirectory against unautorisized usage! If you are using apache, you can add these lines to your /etc/httpd/access.conf:

<Directory /usr/local/httpd/cgi-bin/admin> 
order allow,deny 
AllowOverride AuthConfig 
allow from all 
Options None 
</Directory> 

And you have to create a .htaccess file in your admin-directory. This could look like this one:

AuthUserFile /usr/local/httpd/.htpasswd 
AuthGroupFile /dev/null 
AuthName servername 
AuthType Basic 
<Limit GET> 
require valid-user  
</Limit> 
  
Of course a .htpasswd must exist. The simpliest way to create such file, is to use the programm create_login.cgi, included in my package. Simply create an empty file .htpasswd and run create_login.cgi without any parameters from your browser. This programm creates the necessary entrys in this file. Simply follow the instructions on the screen.

At the end you have to restart your webserver! 
 




 Configuration 

The next important step is to edit the supplied configuration-file config.sh. It is strongly recommended to do this, otherwise it could cause irreparable damages on your system if you run the scripts without editing the config-file!
HINT: At the first time running the scripts, use dummy files, NOT your real user-files. Try the package out, and take a look to this files to see what is happen!

It follows a complete description of every parameter. Please read carefully:

This is the URL to your cgi-bin directory, where the scripts are located:
        CGIDIR="http://servername/cgi-bin/admin" 

This is the real path to the script directory:
        EXECDIR="/usr/local/httpd/cgi-bin/admin" 

The directory, where the script copies the backup, of course it must exist:
        BACKUPDIR="/etc/admin/backup" 

The directory to use for temporary files:
        TMPDIR="/tmp" 

The directory, where the files for your mailinglist are located:
        LISTDIR="/etc/mail/lists" 

The file contains the subscribed users of the mailinglist. ATTENTION: on our system this file contains usernames, not email-adresses. If you have a mailinglist, but this file contains Email-adresses, you MUST edit the scripts or you cannot use this feature (set MODIFY_ALL to "no")
        LIST="$LISTDIR/majordomo.list" 

The directory containing all files we should copy in a users home-directory, i.e. .bashrc or .profile. It must of course exist:
       HOMEDIR="/home/default" 

The password file
        PASSWD="/etc/passwd" 

The Group File
        GROUP="/etc/group" 

The shadow file (containis encrypted passwords):
        SHADOW="/etc/shadow" 

The aliases file (username-to-emailadress mapping):
        ALIASES="/etc/mail/aliases" 

The file contains the usernames of all your users. It is referenced in aliases and used to write mail messages to all users on your machine, i.e. if you had installed a new software and want to inform the people about that. The line in aliases should looks like that: users: :include:/etc/mail/lists/users. 
        USERS="/etc/mail/users" 

Archiv user for your mailinglist. This user will not be editable:
        LIST_ARCHIV="archiv" 
  
This parameter defines, when we should make backup. 
If set to "no" then the backup will only created once a day (at the first start of the scripts on one day).
If set to "yes" then the backup will created every time the script runs.

        BACKUP_RUN="no" 

The programm we use to parse cgi output. You shoud not edit this line:
        PARSE="$EXECDIR/proccgi" 

This defines what should be modified by the scripts.
If set to "no" then only passwd, shadow and users are affected. But it is really the best way to define the path to your aliases file. It will not be modified but it will be displayed, which is very usefull.
If set to "yes" also the aliases and mailinglist file will be modified.
        MODIFY_ALL="yes" 

With this option you can turn on or off the logging capabilities:
          ADMIN_LOG="yes" 

The location of the logfile. In the logfile you can see when a user was created, modified, deleted or a backup was made:
       ADMIN_LOGFILE="/var/log/admin.log" 

The colour of a link:
        L_COL="\"#0000ff\"" 

The colour of a visited link:
        VL_COL="\"#0000ff\"" 

The background colour of all pages:
        BG_COL="\"a0a0a0\"" 

The background of tables (is not supported from all browsers):
        TAB_COL="\"#ffffff\"" 

The colour of a table header:
        HEAD_COL="\"#e0e0e0\"" 

The colour of a table title:
        TITLE_COL="\"#bbc0c0\"" 

The title of all pages:
        TITLE="User Administration at foo.com" 

Title of main site (display.cgi):
        TAB_MAIN="Current  users" 

Title of edit table:
        TAB_EDIT="Edit a user" 

Title of delete user table:
        TAB_DEL="User deleted" 

Title of newuser table:
        TAB_NEW="Create a new user" 

Title of change-passwd table
        TAB_CHPW="Password changed" 

Title of user created table:
        TAB_CREAT="A new user was created" 

The caption of the "Back"-link on every page, points to display.cgi:
      BACK_CAPTION="Back" 

Captions of the links on the main view:
        C_NEWUSER="Create user" 
        C_SHOWCONFIG="Show Config" 
        C_SHOWLIST="Show List Members" 
        C_SHOWFILES="Show files" 
        C_DOCU="Documentation" 

And there are various functions defined in config.sh, that are used by the scripts. You can edit some of the functions for your needs:

  • HTML_START - displays "content-type: text/html\n\n", the html-header and the back-link
  • HTML_END - displays the html-footer and the back-link
  • TABLE_HEAD - displays the table header
  • TABLE_END - displays the table footer
  • CHECK_RIGHTS - checks if all affected files are writable
  • BACKUP - checks if we have to make a backup and calls MAKE_BACKUP
  • MAKE_LOG - if logging is turned on, this function create the entrys in the log-file
  • ADMIN_LOCK - is called from modify.cgi and deluser.cgi when editing of files is in progress, creates a lock-file 
  • ADMIN_UNLOCK -  deletes the lock-file
  • CREATE_HOME - creates the home-dir for a new user
 




Usage 

If you are ready with installation and configuration, you can run the mainscript the first time:
http://servename/cgi-bin/admin/display.cgi 

Now a table should apear, which displays all currently on your system installed users. Only users will displayed with a userid bigger then 499. If you don't like this, edit display.cgi to correct it. In a later version this will be a configurable variable.

You can click on a users link to edit him. In the edit view cou can edit the following parameters:

  • a users home-directory (Attention: in this version only passwd is edited if you change this parameter. The directory itself is NOT affected! You have to copy/move manually)
  • the loginshell
  • if the user should get mailinglist mails
  • the E-mail adress of the user, this is recommended!
Additionally here you can find two links to:
  • delete a user
  • change a users password
In the mainview there are the following links available (don' forget, that the caption of the links are configurable):
  • Create New User - Creates a new user, include a home-directory, an aliases entry (if turned on) and a mailinglist entry. It provide you with a default password. If you don't like this default password, you have to edit the script newuser.cgi to change it.
  • Show Listmembers - Shows the currently to the mailinglist subscribed user and theyr E-mail adresses
  • Show config - show the contents of the file config.ch
  • Show files - shows all affested files, each one in an extra table (this could be a really large file! Use with care!) This feature is implemented for debugging. You can see, what the scripts has made with your files.

With the script create_login.cgi you can create a htaccess login for yourself or a collegue. Simply run it from your browser (no links points to this programm!) and follow the instructions on your sreen.
 




Copyright 

Copyright for Admin CGI: Thomas Linden,  tom@daemon.de 
Copyright fo proccgi: Frank Pilhofer
All scripts are distributed under the terms of the GNU General Public License (GPL). Feel free to modify or to redistribute the package or parts of it, but the result of the modifications must be distributed under GPL too.
If you modify something, pleas a drop me a line:  tom@daemon.de .
 



        GNU GENERAL PUBLIC LICENSE 
             
                        Version 2, June 1991  

            Copyright (C) 1989, 1991 Free Software Foundation, Inc.  
                                     675 Mass Ave, Cambridge, MA 02139, USA  
            Everyone is permitted to copy and distribute verbatim copies  
            of this license document, but changing it is not allowed.  

                                       Preamble  

             The licenses for most software are designed to take away your  
           freedom to share and change it.  By contrast, the GNU General Public  
           License is intended to guarantee your freedom to share and change free  
           software--to make sure the software is free for all its users.  This  
           General Public License applies to most of the Free Software  
           Foundation's software and to any other program whose authors commit to  
           using it.  (Some other Free Software Foundation software is covered by  
           the GNU Library General Public License instead.)  You can apply it to  
           your programs, too.  

             When we speak of free software, we are referring to freedom, not  
           price.  Our General Public Licenses are designed to make sure that you  
           have the freedom to distribute copies of free software (and charge for  
           this service if you wish), that you receive source code or can get it  
           if you want it, that you can change the software or use pieces of it  
           in new free programs; and that you know you can do these things.  

             To protect your rights, we need to make restrictions that forbid  
           anyone to deny you these rights or to ask you to surrender the rights.  
           These restrictions translate to certain responsibilities for you if you  
           distribute copies of the software, or if you modify it.  

             For example, if you distribute copies of such a program, whether  
           gratis or for a fee, you must give the recipients all the rights that  
           you have.  You must make sure that they, too, receive or can get the  
           source code.  And you must show them these terms so they know their  
           rights.  

             We protect your rights with two steps: (1) copyright the software, and  
           (2) offer you this license which gives you legal permission to copy,  
           distribute and/or modify the software.  

             Also, for each author's protection and ours, we want to make certain  
           that everyone understands that there is no warranty for this free  
           software.  If the software is modified by someone else and passed on, we  
           want its recipients to know that what they have is not the original, so  
           that any problems introduced by others will not reflect on the original  
           authors' reputations.  

             Finally, any free program is threatened constantly by software  
           patents.  We wish to avoid the danger that redistributors of a free  
           program will individually obtain patent licenses, in effect making the  
           program proprietary.  To prevent this, we have made it clear that any  
           patent must be licensed for everyone's free use or not licensed at all.  

             The precise terms and conditions for copying, distribution and  
           modification follow.  

                               GNU GENERAL PUBLIC LICENSE  
              TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION  

             0. This License applies to any program or other work which contains  
           a notice placed by the copyright holder saying it may be distributed  
           under the terms of this General Public License.  The "Program", below,  
           refers to any such program or work, and a "work based on the Program"  
           means either the Program or any derivative work under copyright law:  
           that is to say, a work containing the Program or a portion of it,  
           either verbatim or with modifications and/or translated into another  
           language.  (Hereinafter, translation is included without limitation in  
           the term "modification".)  Each licensee is addressed as "you".  

           Activities other than copying, distribution and modification are not  
           covered by this License; they are outside its scope.  The act of  
           running the Program is not restricted, and the output from the Program  
           is covered only if its contents constitute a work based on the  
           Program (independent of having been made by running the Program).  
           Whether that is true depends on what the Program does.  

             1. You may copy and distribute verbatim copies of the Program's  
           source code as you receive it, in any medium, provided that you  
           conspicuously and appropriately publish on each copy an appropriate  
           copyright notice and disclaimer of warranty; keep intact all the  
           notices that refer to this License and to the absence of any warranty;  
           and give any other recipients of the Program a copy of this License  
           along with the Program.  

           You may charge a fee for the physical act of transferring a copy, and  
           you may at your option offer warranty protection in exchange for a fee.  

             2. You may modify your copy or copies of the Program or any portion  
           of it, thus forming a work based on the Program, and copy and  
           distribute such modifications or work under the terms of Section 1  
           above, provided that you also meet all of these conditions:  

               a) You must cause the modified files to carry prominent notices  
               stating that you changed the files and the date of any change.  

               b) You must cause any work that you distribute or publish, that in  
               whole or in part contains or is derived from the Program or any  
               part thereof, to be licensed as a whole at no charge to all third  
               parties under the terms of this License.  

               c) If the modified program normally reads commands interactively  
               when run, you must cause it, when started running for such  
               interactive use in the most ordinary way, to print or display an  
               announcement including an appropriate copyright notice and a  
               notice that there is no warranty (or else, saying that you provide  
               a warranty) and that users may redistribute the program under  
               these conditions, and telling the user how to view a copy of this  
               License.  (Exception: if the Program itself is interactive but  
               does not normally print such an announcement, your work based on  
               the Program is not required to print an announcement.)  

           These requirements apply to the modified work as a whole.  If  
           identifiable sections of that work are not derived from the Program,  
           and can be reasonably considered independent and separate works in  
           themselves, then this License, and its terms, do not apply to those  
           sections when you distribute them as separate works.  But when you  
           distribute the same sections as part of a whole which is a work based  
           on the Program, the distribution of the whole must be on the terms of  
           this License, whose permissions for other licensees extend to the  
           entire whole, and thus to each and every part regardless of who wrote it.  

           Thus, it is not the intent of this section to claim rights or contest  
           your rights to work written entirely by you; rather, the intent is to  
           exercise the right to control the distribution of derivative or  
           collective works based on the Program.  

           In addition, mere aggregation of another work not based on the Program  
           with the Program (or with a work based on the Program) on a volume of  
           a storage or distribution medium does not bring the other work under  
           the scope of this License.  

             3. You may copy and distribute the Program (or a work based on it,  
           under Section 2) in object code or executable form under the terms of  
           Sections 1 and 2 above provided that you also do one of the following:  

               a) Accompany it with the complete corresponding machine-readable  
               source code, which must be distributed under the terms of Sections  
               1 and 2 above on a medium customarily used for software interchange; or,  

               b) Accompany it with a written offer, valid for at least three  
               years, to give any third party, for a charge no more than your  
               cost of physically performing source distribution, a complete  
               machine-readable copy of the corresponding source code, to be  
               distributed under the terms of Sections 1 and 2 above on a medium  
               customarily used for software interchange; or,  

               c) Accompany it with the information you received as to the offer  
               to distribute corresponding source code.  (This alternative is  
               allowed only for noncommercial distribution and only if you  
               received the program in object code or executable form with such  
               an offer, in accord with Subsection b above.)  

           The source code for a work means the preferred form of the work for  
           making modifications to it.  For an executable work, complete source  
           code means all the source code for all modules it contains, plus any  
           associated interface definition files, plus the scripts used to  
           control compilation and installation of the executable.  However, as a  
           special exception, the source code distributed need not include  
           anything that is normally distributed (in either source or binary  
           form) with the major components (compiler, kernel, and so on) of the  
           operating system on which the executable runs, unless that component  
           itself accompanies the executable.  

           If distribution of executable or object code is made by offering  
           access to copy from a designated place, then offering equivalent  
           access to copy the source code from the same place counts as  
           distribution of the source code, even though third parties are not  
           compelled to copy the source along with the object code.  

             4. You may not copy, modify, sublicense, or distribute the Program  
           except as expressly provided under this License.  Any attempt  
           otherwise to copy, modify, sublicense or distribute the Program is  
           void, and will automatically terminate your rights under this License.  
           However, parties who have received copies, or rights, from you under  
           this License will not have their licenses terminated so long as such  
           parties remain in full compliance.  

             5. You are not required to accept this License, since you have not  
           signed it.  However, nothing else grants you permission to modify or  
           distribute the Program or its derivative works.  These actions are  
           prohibited by law if you do not accept this License.  Therefore, by  
           modifying or distributing the Program (or any work based on the  
           Program), you indicate your acceptance of this License to do so, and  
           all its terms and conditions for copying, distributing or modifying  
           the Program or works based on it.  

             6. Each time you redistribute the Program (or any work based on the  
           Program), the recipient automatically receives a license from the  
           original licensor to copy, distribute or modify the Program subject to  
           these terms and conditions.  You may not impose any further  
           restrictions on the recipients' exercise of the rights granted herein.  
           You are not responsible for enforcing compliance by third parties to  
           this License.  

             7. If, as a consequence of a court judgment or allegation of patent  
           infringement or for any other reason (not limited to patent issues),  
           conditions are imposed on you (whether by court order, agreement or  
           otherwise) that contradict the conditions of this License, they do not  
           excuse you from the conditions of this License.  If you cannot  
           distribute so as to satisfy simultaneously your obligations under this  
           License and any other pertinent obligations, then as a consequence you  
           may not distribute the Program at all.  For example, if a patent  
           license would not permit royalty-free redistribution of the Program by  
           all those who receive copies directly or indirectly through you, then  
           the only way you could satisfy both it and this License would be to  
           refrain entirely from distribution of the Program.  

           If any portion of this section is held invalid or unenforceable under  
           any particular circumstance, the balance of the section is intended to  
           apply and the section as a whole is intended to apply in other  
           circumstances.  

           It is not the purpose of this section to induce you to infringe any  
           patents or other property right claims or to contest validity of any  
           such claims; this section has the sole purpose of protecting the  
           integrity of the free software distribution system, which is  
           implemented by public license practices.  Many people have made  
           generous contributions to the wide range of software distributed  
           through that system in reliance on consistent application of that  
           system; it is up to the author/donor to decide if he or she is willing  
           to distribute software through any other system and a licensee cannot  
           impose that choice.  

           This section is intended to make thoroughly clear what is believed to  
           be a consequence of the rest of this License.  

             8. If the distribution and/or use of the Program is restricted in  
           certain countries either by patents or by copyrighted interfaces, the  
           original copyright holder who places the Program under this License  
           may add an explicit geographical distribution limitation excluding  
           those countries, so that distribution is permitted only in or among  
           countries not thus excluded.  In such case, this License incorporates  
           the limitation as if written in the body of this License.  

             9. The Free Software Foundation may publish revised and/or new versions  
           of the General Public License from time to time.  Such new versions will  
           be similar in spirit to the present version, but may differ in detail to  
           address new problems or concerns.  

           Each version is given a distinguishing version number.  If the Program  
           specifies a version number of this License which applies to it and "any  
           later version", you have the option of following the terms and conditions  
           either of that version or of any later version published by the Free  
           Software Foundation.  If the Program does not specify a version number of  
           this License, you may choose any version ever published by the Free Software  
           Foundation.  

             10. If you wish to incorporate parts of the Program into other free  
           programs whose distribution conditions are different, write to the author  
           to ask for permission.  For software which is copyrighted by the Free  
           Software Foundation, write to the Free Software Foundation; we sometimes  
           make exceptions for this.  Our decision will be guided by the two goals  
           of preserving the free status of all derivatives of our free software and  
           of promoting the sharing and reuse of software generally.  

                                       NO WARRANTY  

             11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY  
           FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN  
           OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES  
           PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED  
           OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  
           MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS  
           TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE  
           PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,  
           REPAIR OR CORRECTION.  

             12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING  
           WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR  
           REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,  
           INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING  
           OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED  
           TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY  
           YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER  
           PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE  
           POSSIBILITY OF SUCH DAMAGES.  

                                END OF TERMS AND CONDITIONS  

                   Appendix: How to Apply These Terms to Your New Programs  

             If you develop a new program, and you want it to be of the greatest  
           possible use to the public, the best way to achieve this is to make it  
           free software which everyone can redistribute and change under these terms.  

             To do so, attach the following notices to the program.  It is safest  
           to attach them to the start of each source file to most effectively  
           convey the exclusion of warranty; and each file should have at least  
           the "copyright" line and a pointer to where the full notice is found.  

               <one line to give the program's name and a brief idea of what it does.>  
               Copyright (C) 19yy  <name of author>  

               This program is free software; you can redistribute it and/or modify  
               it under the terms of the GNU General Public License as published by  
               the Free Software Foundation; either version 2 of the License, or  
               (at your option) any later version.  

               This program is distributed in the hope that it will be useful,  
               but WITHOUT ANY WARRANTY; without even the implied warranty of  
               MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
               GNU General Public License for more details.  

               You should have received a copy of the GNU General Public License  
               along with this program; if not, write to the Free Software  
               Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  

           Also add information on how to contact you by electronic and paper mail.  

           If the program is interactive, make it output a short notice like this  
           when it starts in an interactive mode:  

               Gnomovision version 69, Copyright (C) 19yy name of author  
               Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.  
               This is free software, and you are welcome to redistribute it  
               under certain conditions; type `show c' for details.  

           The hypothetical commands `show w' and `show c' should show the appropriate  
           parts of the General Public License.  Of course, the commands you use may  
           be called something other than `show w' and `show c'; they could even be  
           mouse-clicks or menu items--whatever suits your program.  

           You should also get your employer (if you work as a programmer) or your  
           school, if any, to sign a "copyright disclaimer" for the program, if  
           necessary.  Here is a sample; alter the names:  

             Yoyodyne, Inc., hereby disclaims all copyright interest in the program  
             `Gnomovision' (which makes passes at compilers) written by James Hacker.  

             <signature of Ty Coon>, 1 April 1989  
             Ty Coon, President of Vice  

           This General Public License does not permit incorporating your program into  
           proprietary programs.  If your program is a subroutine library, you may  
           consider it more useful to permit linking proprietary applications with the  
           library.  If this is what you want to do, use the GNU Library General  
           Public License instead of this License.