Index: head/release/picobsd/floppy.tree/sbin/dhclient-script =================================================================== --- head/release/picobsd/floppy.tree/sbin/dhclient-script (revision 354345) +++ head/release/picobsd/floppy.tree/sbin/dhclient-script (nonexistent) @@ -1,384 +0,0 @@ -#!/bin/sh -# -# $OpenBSD: dhclient-script,v 1.6 2004/05/06 18:22:41 claudio Exp $ -# $FreeBSD$ -# -# Copyright (c) 2003 Kenneth R Westerback -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -# -# - -ARP=/usr/sbin/arp -HOSTNAME=/bin/hostname -IFCONFIG='/sbin/ifconfig -n' - -LOCALHOST=127.0.0.1 - -if [ -x /usr/bin/logger ]; then - LOGGER="/usr/bin/logger -s -p user.notice -t dhclient" -else - LOGGER=echo -fi - -# -# Helper functions that implement common actions. -# - -check_hostname() { - current_hostname=`$HOSTNAME` - if [ -z "$current_hostname" ]; then - $LOGGER "New Hostname ($interface): $new_host_name" - $HOSTNAME $new_host_name - elif [ "$current_hostname" = "$old_host_name" -a \ - "$new_host_name" != "$old_host_name" ]; then - $LOGGER "New Hostname ($interface): $new_host_name" - $HOSTNAME $new_host_name - fi -} - -arp_flush() { - arp -an -i $interface | \ - sed -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' | \ - sh >/dev/null 2>&1 -} - -delete_old_address() { - eval "$IFCONFIG $interface inet -alias $old_ip_address $medium" -} - -add_new_address() { - eval "$IFCONFIG $interface \ - inet $new_ip_address \ - netmask $new_subnet_mask \ - broadcast $new_broadcast_address \ - $medium" - - $LOGGER "New IP Address ($interface): $new_ip_address" - $LOGGER "New Subnet Mask ($interface): $new_subnet_mask" - $LOGGER "New Broadcast Address ($interface): $new_broadcast_address" - $LOGGER "New Routers ($interface): $new_routers" -} - -delete_old_alias() { - if [ -n "$alias_ip_address" ]; then - $IFCONFIG $interface inet -alias $alias_ip_address > /dev/null 2>&1 - #route delete $alias_ip_address $LOCALHOST > /dev/null 2>&1 - fi -} - -add_new_alias() { - if [ -n "$alias_ip_address" ]; then - $IFCONFIG $interface inet alias $alias_ip_address netmask \ - $alias_subnet_mask - #route add $alias_ip_address $LOCALHOST - fi -} - -fill_classless_routes() { - set $1 - while [ $# -ge 5 ]; do - if [ $1 -eq 0 ]; then - route="default" - elif [ $1 -le 8 ]; then - route="$2.0.0.0/$1" - shift - elif [ $1 -le 16 ]; then - route="$2.$3.0.0/$1" - shift; shift - elif [ $1 -le 24 ]; then - route="$2.$3.$4.0/$1" - shift; shift; shift - else - route="$2.$3.$4.$5/$1" - shift; shift; shift; shift - fi - shift - router="$1.$2.$3.$4" - classless_routes="$classless_routes $route $router" - shift; shift; shift; shift - done -} - -delete_old_routes() { - #route delete "$old_ip_address" $LOCALHOST >/dev/null 2>&1 - if [ -n "$old_classless_routes" ]; then - fill_classless_routes "$old_classless_routes" - set $classless_routes - while [ $# -gt 1 ]; do - route delete "$1" "$2" - shift; shift - done - return 0; - fi - - # If we supported multiple default routes, we'd be removing each - # one here. We don't so just delete the default route if it's - # through our interface. - if is_default_interface; then - route delete default >/dev/null 2>&1 - fi - - if [ -n "$old_static_routes" ]; then - set $old_static_routes - while [ $# -gt 1 ]; do - route delete "$1" "$2" - shift; shift - done - fi - - arp_flush -} - -add_new_routes() { - #route add $new_ip_address $LOCALHOST >/dev/null 2>&1 - - # RFC 3442: If the DHCP server returns both a Classless Static - # Routes option and a Router option, the DHCP client MUST ignore - # the Router option. - # - # DHCP clients that support this option (Classless Static Routes) - # MUST NOT install the routes specified in the Static Routes - # option (option code 33) if both a Static Routes option and the - # Classless Static Routes option are provided. - - if [ -n "$new_classless_routes" ]; then - fill_classless_routes "$new_classless_routes" - $LOGGER "New Classless Static Routes ($interface): $classless_routes" - set $classless_routes - while [ $# -gt 1 ]; do - if [ "0.0.0.0" = "$2" ]; then - route add "$1" -iface "$interface" - else - route add "$1" "$2" - fi - shift; shift - done - return - fi - - for router in $new_routers; do - if is_default_interface; then - - if [ "$new_ip_address" = "$router" ]; then - route add default -iface $router >/dev/null 2>&1 - else - route add default $router >/dev/null 2>&1 - fi - fi - # 2nd and subsequent default routers error out, so explicitly - # stop processing the list after the first one. - break - done - - if [ -n "$new_static_routes" ]; then - $LOGGER "New Static Routes ($interface): $new_static_routes" - set $new_static_routes - while [ $# -gt 1 ]; do - route add $1 $2 - shift; shift - done - fi -} - -add_new_resolv_conf() { - # XXX Old code did not create/update resolv.conf unless both - # $new_domain_name and $new_domain_name_servers were provided. PR - # #3135 reported some ISP's only provide $new_domain_name_servers and - # thus broke the script. This code creates the resolv.conf if either - # are provided. - - local tmpres=/var/run/resolv.conf.${interface} - rm -f $tmpres - - if [ -n "$new_domain_name" ]; then - echo "search $new_domain_name" >>$tmpres - fi - - if [ -n "$new_domain_name_servers" ]; then - for nameserver in $new_domain_name_servers; do - echo "nameserver $nameserver" >>$tmpres - done - fi - - if [ -f $tmpres ]; then - if [ -f /etc/resolv.conf.tail ]; then - cat /etc/resolv.conf.tail >>$tmpres - fi - - # When resolv.conf is not changed actually, we don't - # need to update it. - # If /usr is not mounted yet, we cannot use cmp, then - # the following test fails. In such case, we simply - # ignore an error and do update resolv.conf. - if cmp -s $tmpres /etc/resolv.conf; then - rm -f $tmpres - return 0 - fi 2>/dev/null - - # In case (e.g. during OpenBSD installs) /etc/resolv.conf - # is a symbolic link, take care to preserve the link and write - # the new data in the correct location. - - if [ -f /etc/resolv.conf ]; then - cat /etc/resolv.conf > /etc/resolv.conf.save - fi - cat $tmpres > /etc/resolv.conf - rm -f $tmpres - - # Try to ensure correct ownership and permissions. - chown -RL root:wheel /etc/resolv.conf - chmod -RL 644 /etc/resolv.conf - - return 0 - fi - - return 1 -} - -# Must be used on exit. Invokes the local dhcp client exit hooks, if any. -exit_with_hooks() { - exit_status=$1 - if [ -f /etc/dhclient-exit-hooks ]; then - . /etc/dhclient-exit-hooks - fi - # probably should do something with exit status of the local script - exit $exit_status -} - -# Get the interface with the current ipv4 default route on it using only -# commands that are available prior to /usr being mounted. -is_default_interface() -{ - routeget="`route -n get -inet default`" - oldifs="$IFS" - IFS=" -" - defif= - for line in $routeget ; do - case $line in - *interface:*) - defif=${line##*: } - ;; - esac - done - IFS=${oldifs} - - if [ -z "$defif" -o "$defif" = "$interface" ]; then - return 0 - else - return 1 - fi -} - -# -# Start of active code. -# - -# Invoke the local dhcp client enter hooks, if they exist. -if [ -f /etc/dhclient-enter-hooks ]; then - exit_status=0 - . /etc/dhclient-enter-hooks - # allow the local script to abort processing of this state - # local script must set exit_status variable to nonzero. - if [ $exit_status -ne 0 ]; then - exit $exit_status - fi -fi - -case $reason in -MEDIUM) - eval "$IFCONFIG $interface $medium" - eval "$IFCONFIG $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1 - sleep 1 - ;; - -PREINIT) - delete_old_alias - $IFCONFIG $interface inet alias 0.0.0.0 netmask 0.0.0.0 broadcast 255.255.255.255 up - ;; - -ARPCHECK|ARPSEND) - ;; - -BOUND|RENEW|REBIND|REBOOT) - check_hostname - if [ -n "$old_ip_address" ]; then - if [ "$old_ip_address" != "$alias_ip_address" ]; then - delete_old_alias - fi - if [ "$old_ip_address" != "$new_ip_address" ]; then - delete_old_address - delete_old_routes - fi - fi - if [ "$reason" = BOUND ] || \ - [ "$reason" = REBOOT ] || \ - [ -z "$old_ip_address" ] || \ - [ "$old_ip_address" != "$new_ip_address" ]; then - add_new_address - add_new_routes - fi - if [ "$new_ip_address" != "$alias_ip_address" ]; then - add_new_alias - fi - if is_default_interface; then - add_new_resolv_conf - fi - ;; - -EXPIRE|FAIL) - delete_old_alias - if [ -n "$old_ip_address" ]; then - delete_old_address - delete_old_routes - fi - if [ -x $ARP ]; then - $ARP -d -a -i $interface - fi - # XXX Why add alias we just deleted above? - add_new_alias - if is_default_interface; then - if [ -f /etc/resolv.conf.save ]; then - cat /etc/resolv.conf.save > /etc/resolv.conf - fi - fi - ;; - -TIMEOUT) - delete_old_alias - add_new_address - sleep 1 - if [ -n "$new_routers" ]; then - $LOGGER "New Routers ($interface): $new_routers" - set "$new_routers" - if ping -q -c 1 -t 1 "$1"; then - if [ "$new_ip_address" != "$alias_ip_address" ]; then - add_new_alias - fi - add_new_routes - if ! is_default_interface; then - exit_with_hooks 0 - fi - if add_new_resolv_conf; then - exit_with_hooks 0 - fi - fi - fi - eval "$IFCONFIG $interface inet -alias $new_ip_address $medium" - delete_old_routes - exit_with_hooks 1 - ;; -esac - -exit_with_hooks 0 Property changes on: head/release/picobsd/floppy.tree/sbin/dhclient-script ___________________________________________________________________ Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/floppy.tree/etc/master.passwd =================================================================== --- head/release/picobsd/floppy.tree/etc/master.passwd (revision 354345) +++ head/release/picobsd/floppy.tree/etc/master.passwd (nonexistent) @@ -1,11 +0,0 @@ -# $FreeBSD$ -root:$1$xOOaGnKU$U9QdsCI40XXcCUMBN.7Az.:0:0::0:0:Charlie &:/root:/bin/sh -toor:*:0:0::0:0:Bourne-again Superuser:/root: -daemon:*:1:1::0:0:Owner of many system processes:/root:/nonexistent -operator:*:2:20::0:0:System &:/usr/guest/operator:/bin/csh -bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/nonexistent -tty:*:4:65533::0:0:Tty Sandbox:/:/nonexistent -sshd:*:22:22::0:0:Secure Shell Daemon:/var/empty:/usr/sbin/nologin -nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/nonexistent -_dhcp:*:65:65::0:0:dhcp programs:/var/empty:/usr/sbin/nologin -user:*:1002:1002:Sample User:0:0:user:/home/user:/bin/sh Property changes on: head/release/picobsd/floppy.tree/etc/master.passwd ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/floppy.tree/etc/ppp/ppp.linkup =================================================================== --- head/release/picobsd/floppy.tree/etc/ppp/ppp.linkup (revision 354345) +++ head/release/picobsd/floppy.tree/etc/ppp/ppp.linkup (nonexistent) @@ -1,10 +0,0 @@ -# Example of ppp.linkup file -# -iij-demand: - delete ALL - add 0 0 HISADDR -# -# Otherwise, simply add peer as default gateway. -# -MYADDR: - add 0 0 HISADDR Property changes on: head/release/picobsd/floppy.tree/etc/ppp/ppp.linkup ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/floppy.tree/etc/ppp/ppp.conf =================================================================== --- head/release/picobsd/floppy.tree/etc/ppp/ppp.conf (revision 354345) +++ head/release/picobsd/floppy.tree/etc/ppp/ppp.conf (nonexistent) @@ -1,9 +0,0 @@ -# $FreeBSD$ -# PPP Sample Configuration File -# Written by Toshiharu OHNO -default: - set device /dev/cuau1 - set speed 38400 - disable lqr - deny lqr - set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" ATE1Q0 OK-AT-OK \\dATDT\\T TIMEOUT 40 CONNECT" Property changes on: head/release/picobsd/floppy.tree/etc/ppp/ppp.conf ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/floppy.tree/etc/ppp/ppp.deny =================================================================== --- head/release/picobsd/floppy.tree/etc/ppp/ppp.deny (revision 354345) +++ head/release/picobsd/floppy.tree/etc/ppp/ppp.deny (nonexistent) @@ -1,15 +0,0 @@ -# list of users disallowed any pppd access via 'system -# password login'. -# read by pppd(8). -root -toor -daemon -operator -bin -games -news -man -ftp -uucp -xten -ingres Property changes on: head/release/picobsd/floppy.tree/etc/ppp/ppp.deny ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/floppy.tree/etc/ppp/ppp.secret.sample =================================================================== --- head/release/picobsd/floppy.tree/etc/ppp/ppp.secret.sample (revision 354345) +++ head/release/picobsd/floppy.tree/etc/ppp/ppp.secret.sample (nonexistent) @@ -1,23 +0,0 @@ -################################################## -# -# Example of ppp.secret file -# -# This file is used to authenticate incoming connections. -# You must ``enable'' either PAP or CHAP in your ppp.conf file. -# The peer may then use any of the Authname/Authkey pairs listed. -# If an IP address is given, it will be assigned to the peer. -# -# If an entry exists for your local machine (as given by the -# ``hostname -s'' command), the password specified will be -# required for all server socket connections. Refer to the ppp(8) -# and pppctl(8) man pages for further details. -# -# $FreeBSD$ -# -################################################## - -# Authname Authkey Peer's IP address - -oscar OurSecretKey 192.244.184.34/24 -BigBird X4dWg9327 192.244.184.33/32 -tama localPasswdForControl Property changes on: head/release/picobsd/floppy.tree/etc/ppp/ppp.secret.sample ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/floppy.tree/etc/ttys =================================================================== --- head/release/picobsd/floppy.tree/etc/ttys (revision 354345) +++ head/release/picobsd/floppy.tree/etc/ttys (nonexistent) @@ -1,36 +0,0 @@ -# -# @(#)ttys 5.1 (Berkeley) 4/17/89 -# -# $FreeBSD$ -# -# name getty type status comments -# -# This entry needed for asking password when init goes to single-user mode -# If you want to be asked for password, change "secure" to "insecure" here -#console none unknown off secure -vga none xterm off secure -# -ttyv0 "/usr/libexec/getty Pc" xterm on secure -# Virtual terminals -ttyv1 "/usr/libexec/getty Pc" xterm on secure -ttyv2 "/usr/libexec/getty Pc" xterm on secure -ttyv3 "/usr/libexec/getty Pc" xterm on secure -ttyv4 "/usr/libexec/getty Pc" xterm on secure -ttyv5 "/usr/libexec/getty Pc" xterm on secure -ttyv6 "/usr/libexec/getty Pc" xterm on secure -ttyv7 "/usr/libexec/getty Pc" xterm on secure -#ttyv8 "/usr/libexec/getty Pc" xterm on secure -#ttyv9 "/usr/libexec/getty Pc" xterm on secure -# Pseudo terminals -ttyp0 none network secure -ttyp1 none network secure -ttyp2 none network secure -ttyp3 none network secure -ttyp4 none network secure -ttyp5 none network secure -ttyp6 none network secure -ttyp7 none network secure -ttyp8 none network secure -ttyp9 none network secure -ttyu0 "/usr/libexec/getty 3wire" dialup on secure -ttyu1 "/usr/libexec/getty 3wire" dialup on secure Property changes on: head/release/picobsd/floppy.tree/etc/ttys ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/floppy.tree/etc/profile =================================================================== --- head/release/picobsd/floppy.tree/etc/profile (revision 354345) +++ head/release/picobsd/floppy.tree/etc/profile (nonexistent) @@ -1,5 +0,0 @@ -# System-wide .profile file for sh(1). -BLOCKSIZE=K; export BLOCKSIZE -PATH=/stand:.; export PATH -EDITOR=ee; export EDITOR -set -E Property changes on: head/release/picobsd/floppy.tree/etc/profile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/floppy.tree/etc/rc.conf.defaults =================================================================== --- head/release/picobsd/floppy.tree/etc/rc.conf.defaults (revision 354345) +++ head/release/picobsd/floppy.tree/etc/rc.conf.defaults (nonexistent) @@ -1,184 +0,0 @@ -#!/bin/sh -# $FreeBSD$ -# -# rc.conf for picobsd. This is sourced from /etc/rc1, and is supposed to -# contain only shell functions that are used later in /etc/rc1. - -# set default values for variables. Boolean values should be either -# NO or YES -- other values are not guaranteed to work. - -rc_conf_set_defaults() { -hostname="" # Should not need to set it -syslogd_enable="NO" -pccard_enable="NO" -swapfile="" # name of swapfile if aux swapfile desired. - -# Network interface configurations: ifconfig_${interface}[_aliasNN] -ifconfig_lo0="inet 127.0.0.1" # default loopback device configuration. -#ifconfig_lo0_alias0="inet 127.0.0.254 netmask 0xffffffff" # Sample alias entry. - -### Network daemons options: they are only run if present. -sshd_enable="YES" # if present... -inetd_enable="YES" # Run the network daemon dispatcher (or NO) -inetd_flags="" # Optional flags to inetd -snmpd_enable="NO" # Run the SNMP daemon (or NO) -snmpd_flags="-C -c /etc/snmpd.conf" # Optional flags to snmpd - -### Network routing options: ### -defaultrouter="NO" # Set to default gateway (or NO). -static_routes="" # Set to static route list (or leave empty). -gateway_enable="NO" # Set to YES if this host will be a gateway. -arpproxy_all="" # replaces obsolete kernel option ARP_PROXYALL. -default_mask="0xffffff00" - -### Other network features -firewall_enable="NO" -firewall_quiet="NO" # be quiet if set. -firewall_type="" # Standard types or absolute pathname. -tcp_extensions="NO" # Allow RFC1323 & RFC1644 extensions (or NO). - -### Overrides for some files in /etc. Leave empty if no override, -### set variable (remember to use multiple lines) to override content. - -host_conf="hosts -bind" -resolv_conf="" -} - -# Try to identify the system by using the MAC address and name of the -# first ethernet interface, made available as $main_eth $main_if -find_system_id() { - main_ether="" - for main_if in `ifconfig -l` ; do - set `ifconfig $main_if` - while [ "$1" != "" ] ; do - if [ $1 = "ether" ] ; then - main_ether=$2 - break 2 - else - shift - fi - done - done -} - -# the following lets the user specify a name and ip for his system -read_address() { - echo "Please enter a hostname and IP address for your system $main_ether" - read hostname the_ip - if [ "${hostname}" != "" ] ; then - echo "# $main_ether $hostname" >> /etc/hosts - echo "$the_ip $hostname" >> /etc/hosts - else - hostname=default - fi -} - -# set "ether" using $1 (interface name) as search key -get_ether() { - local key - key=$1 - ether="" - set `ifconfig ${key}` - while [ "$1" != "" ] ; do - if [ "$1" = "ether" ] ; then - ether=$2 - break - else - shift - fi - done -} - -# read content from /etc/hosts into a couple of arrays -# (needed later in fetch_hostname) -read_hosts() { - local i a b c key junk - i="" - while read a b c junk ; do - if [ "$a" = "#ethertable" ] ; then - i=0 - elif [ "$i" != "" -a "$a" = "#" -a "$b" != "" ] ; then - eval eth_${i}=$b - eval eth_host_${i}=$c - i=$(($i+1)) - fi - done < /etc/hosts -} - -# set ${hostname} using $1 (MAC address) as search key in /etc/hosts -# Returns empty value if $1 is empty -fetch_hostname() { - local i b key - hostname="" - [ "$1" = "" ] && return - key=$1 - i=0 - b="x" - [ "${eth_0}" = "" ] && read_hosts # fill cache. - while [ "$b" != "" -a "${hostname}" = "" ] ; do - eval b=\${eth_${i}} - case X${key} in - X${b} ) # so we can use wildcards - eval hostname=\${eth_host_${i}} - break - ;; - esac - i=$(($i+1)) - done - echo "fetch_hostname for <${key}> returns <${hostname}>" -} - -# sets "mask" using $1 (netmask name) as the search key in /etc/networks -fetch_mask() { - local a b key junk - key=$1 # search key, typically hostname-netmask - mask="" - while read a b junk; do # key mask otherstuff - case X${key} in - X${a} ) # The X is so we can use wildcards in ${a} - mask=$b - break - ;; - esac - done < /etc/networks - if [ "${mask}" = "" ] ; then - mask=${default_mask} - fi - echo "fetch_mask for <${key}> returns <${mask}>" -} - -# set hostname, and ifconfig_${main_if} (whose MAC is ${main_ether}) -# if not found, read from console -set_main_interface() { - if [ -z "${hostname}" ] ; then - if [ -z "${main_ether}" ] ; then - echo "No ethernets found, using localhost" - hostname=localhost - return - fi - fetch_hostname ${main_ether} - fi - - [ -z "${hostname}" -o "${hostname}" = "." ] && read_address - - fetch_mask ${hostname}-netmask - - eval ifconfig_${main_if}=\" \${hostname} netmask \${mask}\" - network_interfaces=`ifconfig -l` -} - -# set ifconfig_${interface} for all other interfaces -set_all_interfaces() { - local i ether hostname mask - - for i in `ifconfig -l` ; do - if [ "$i" != "${main_if}" ] ; then - get_ether $i - fetch_hostname ${ether} - fetch_mask ${hostname}-netmask - [ -n "${ether}" -a -n "${hostname}" ] && \ - eval ifconfig_${i}=\" \${hostname} netmask \${mask}\" - fi - done -} Property changes on: head/release/picobsd/floppy.tree/etc/rc.conf.defaults ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/floppy.tree/etc/fstab =================================================================== --- head/release/picobsd/floppy.tree/etc/fstab (revision 354345) +++ head/release/picobsd/floppy.tree/etc/fstab (nonexistent) @@ -1,6 +0,0 @@ -# $FreeBSD$ -proc /proc procfs rw 0 0 -/dev/fd0c /fd ufs rw,noauto 0 0 -/dev/ad0s1 /dos msdosfs rw,noauto 0 0 -/dev/ad0s1a /wd ufs rw,noauto 0 0 -/dev/acd0c /cdrom cd9660 ro,noauto 0 0 Property changes on: head/release/picobsd/floppy.tree/etc/fstab ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/floppy.tree/etc/snmpd.conf =================================================================== --- head/release/picobsd/floppy.tree/etc/snmpd.conf (revision 354345) +++ head/release/picobsd/floppy.tree/etc/snmpd.conf (nonexistent) @@ -1,58 +0,0 @@ -# load average checks - -# load [1MAX=DEFMAXLOADAVE] [5MAX=DEFMAXLOADAVE] [15MAX=DEFMAXLOADAVE] -# -# 1MAX: If the 1 minute load average is above this limit at query -# time, the errorFlag will be set. -# 5MAX: Similar, but for 5 min average. -# 15MAX: Similar, but for 15 min average. - -# Check for loads: -load 12 14 14 - -# % snmpwalk -v 1 localhost public .1.3.6.1.4.1.2021.10 - -# snmp agent errors - -# % snmpwalk -v 1 localhost public .1.3.6.1.4.1.2021.101 - -# snmp version mib - -# % snmpwalk -v 1 localhost public .1.3.6.1.4.1.2021.100 - -# System contact information - -syslocation PicoBSD -syscontact root - -# Setting up the access control lists to the agent - -# sec.name source community -com2sec local localhost private -com2sec public default public - -# sec.model sec.name -group local any local -group public any public - -# incl/excl subtree mask -view all included .1 80 -view system included system fe -view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc - -# context sec.model sec.level prefix read write not -access public "" any noauth 0 system none none -access local "" any noauth 0 all all all - -# If you want to get back to the functionality of previous versions, -# where the public community could read anything from anywhere and the -# private community could write anything from anywhere, use these -# lines instead: -# -# com2sec public default public -# com2sec private default private -# group public any public -# group private any private -# view all included .1 80 -# access public "" any noauth 0 all none none -# access private "" any noauth 0 all all none Property changes on: head/release/picobsd/floppy.tree/etc/snmpd.conf ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/floppy.tree/etc/hosts =================================================================== --- head/release/picobsd/floppy.tree/etc/hosts (revision 354345) +++ head/release/picobsd/floppy.tree/etc/hosts (nonexistent) @@ -1,17 +0,0 @@ -# $FreeBSD$ -# This file contains ip <-> hostname mapping. -# It is also used for autoconfiguration based on Ethernet address -# and other things. The initial part is just a standard /etc/hosts -# for local hosts that share this file. -127.0.0.1 localhost localhost.mydomain.edu -127.0.0.1 pico.mydomain.edu -10.0.0.1 default -192.168.254.1 vmrouter -192.168.254.2 vm - -#ethertable This line starts the ethernet->hostname mapping -# main_ether hostname -# 00:12:34:56:78:9a myaddress -# 00:bd:* vm -# default default - Property changes on: head/release/picobsd/floppy.tree/etc/hosts ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/floppy.tree/etc/inetd.conf =================================================================== --- head/release/picobsd/floppy.tree/etc/inetd.conf (revision 354345) +++ head/release/picobsd/floppy.tree/etc/inetd.conf (nonexistent) @@ -1,21 +0,0 @@ -# -# Internet server configuration database -# -# @(#)inetd.conf 5.4 (Berkeley) 6/30/90 -# -telnet stream tcp nowait root /usr/libexec/telnetd telnetd -# -# "Small servers" -- used to be standard on, but we're more conservative -# about things due to Internet security concerns. Only turn on what you -# need. -# -#daytime stream tcp nowait root internal -#daytime dgram udp wait root internal -#time stream tcp nowait root internal -#time dgram udp wait root internal -#echo stream tcp nowait root internal -#echo dgram udp wait root internal -#discard stream tcp nowait root internal -#discard dgram udp wait root internal -#chargen stream tcp nowait root internal -#chargen dgram udp wait root internal Property changes on: head/release/picobsd/floppy.tree/etc/inetd.conf ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/floppy.tree/etc/rc1 =================================================================== --- head/release/picobsd/floppy.tree/etc/rc1 (revision 354345) +++ head/release/picobsd/floppy.tree/etc/rc1 (nonexistent) @@ -1,63 +0,0 @@ -#!/bin/sh -# $FreeBSD$ -### rc1, next stage 'rc' for PicoBSD -- THIS IS NOT THE NORMAL /etc/rc - -. /etc/rc.conf.defaults # Load default procedures -rc_conf_set_defaults # Assign default values to variables. -find_system_id # Set $main_eth $main_if -set_main_interface # Set ${hostname} and ${ifconfig_${main_if}} -set_all_interfaces # Set ${ifconfig_${if}} for other interfaces. - -# Now process local configurations if present. ${hostname} should be set now, -# so rc.conf[.local] can make use of a case statement to set per-host things. - -[ -f /etc/rc.conf ] && . /etc/rc.conf -[ -f /etc/rc.conf.local ] && . /etc/rc.conf.local - -### Now use some variables to override files in /etc ### -( IFS='' -[ -n "${host_conf}" ] && echo ${host_conf} > /etc/host.conf -[ -n "${resolv_conf}" ] && echo ${resolv_conf} > /etc/resolv.conf -[ -n "${rc_local}" ] && echo ${rc_local} > /etc/rc.local -unset IFS -) - -rm -f /var/run/* -if [ "x$swapfile" != "xNO" -a -w "$swapfile" -a -b /dev/vn0b ]; then - echo "Adding $swapfile as additional swap." - vnconfig /dev/vn0b $swapfile && swapon /dev/vn0b -else - echo "No swap partition available!" -fi -# configure serial devices -[ -f /etc/rc.serial ] && . /etc/rc.serial - -# start up the initial network configuration. -if [ -f /etc/rc.network ]; then - . /etc/rc.network - network_pass1 -fi -mount -a -t nfs -# clean up left-over files -(cd /var/run && { cp /dev/null utmp; chmod 644 utmp; }) - -[ -n "$network_pass1_done" ] && network_pass2 -[ -n "$network_pass2_done" ] && network_pass3 - -pwd_mkdb -p ./master.passwd - -[ -f /etc/syslog.conf -a -f /stand/syslogd ] && \ - { echo "Starting syslogd."; syslogd ${syslogd_flags} ; } - -[ "${inetd_enable}" = "YES" -a -f /stand/inetd ] && \ - { echo "Starting inetd."; inetd ${inetd_flags} ; } - -if [ "${sshd_enable}" = "YES" -a -f /usr/sbin/sshd ] ; then - echo "Starting sshd..." - chmod 600 /etc/ssh_host*key - /usr/sbin/sshd -f /etc/sshd_config -fi - -echo '' -cat /etc/motd -exit 0 Property changes on: head/release/picobsd/floppy.tree/etc/rc1 ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/floppy.tree/etc/networks =================================================================== --- head/release/picobsd/floppy.tree/etc/networks (revision 354345) +++ head/release/picobsd/floppy.tree/etc/networks (nonexistent) @@ -1,5 +0,0 @@ -# Sample networks file. Picobsd scripts will look for entries of the form -# hostname-netmask 255.255.255.0 -# when searching for masks -vm-netmask 255.255.255.0 - Property changes on: head/release/picobsd/floppy.tree/etc/networks ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/floppy.tree/etc/rc.conf =================================================================== --- head/release/picobsd/floppy.tree/etc/rc.conf (revision 354345) +++ head/release/picobsd/floppy.tree/etc/rc.conf (nonexistent) @@ -1,10 +0,0 @@ -# Sample rc.conf file for PicoBSD -# you should mostly set variables here, see rc.conf.defaults. - -tcp_extensions=YES # enable rfc1323 and rfc1644 - -case ${hostname} in -*) - echo "processing rc.conf for ${hostname}" - ;; -esac Property changes on: head/release/picobsd/floppy.tree/etc/rc.conf ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Index: head/release/picobsd/floppy.tree/etc/rc.firewall =================================================================== --- head/release/picobsd/floppy.tree/etc/rc.firewall (revision 354345) +++ head/release/picobsd/floppy.tree/etc/rc.firewall (nonexistent) @@ -1,142 +0,0 @@ -# $FreeBSD$ - -# Setup system for firewall service, with some sample configurations. -# Select one using ${firewall_type} which you can set in /etc/rc.conf.local. -# -# If you override this file with your own copy, you can use ${hostname} -# as the key for the case statement. On entry, the firewall will be flushed -# and $fwcmd will point to the appropriate command (usually /sbin/ipfw) -# -# Sample configurations are: -# open - will allow anyone in -# client - will try to protect just this machine (should be customized). -# simple - will try to protect a whole network (should be customized). -# closed - totally disables IP services except via lo0 interface -# UNKNOWN - disables the loading of firewall rules. -# filename - will load the rules in the given filename (full path required) -# - -############ -# Only in rare cases do you want to change these rules -$fwcmd add 1000 pass all from any to any via lo0 -$fwcmd add 1010 deny all from 127.0.0.0/8 to 127.0.0.0/8 - - -# Prototype setups. -case "${firewall_type}" in -open|OPEN) - $fwcmd add 65000 pass all from any to any - ;; - -client) - - ############ - # This is a prototype setup that will protect your system somewhat against - # people from outside your own network. - ############ - - # set these to your network and netmask and ip - net="192.168.4.0" - mask="255.255.255.0" - ip="192.168.4.17" - - # Allow any traffic to or from my own net. - $fwcmd add pass all from ${ip} to ${net}:${mask} - $fwcmd add pass all from ${net}:${mask} to ${ip} - - # Allow TCP through if setup succeeded - $fwcmd add pass tcp from any to any established - - # Allow setup of incoming email - $fwcmd add pass tcp from any to ${ip} 25 setup - - # Allow setup of outgoing TCP connections only - $fwcmd add pass tcp from ${ip} to any setup - - # Disallow setup of all other TCP connections - $fwcmd add deny tcp from any to any setup - - # Allow DNS queries out in the world - $fwcmd add pass udp from any 53 to ${ip} - $fwcmd add pass udp from ${ip} to any 53 - - # Allow NTP queries out in the world - $fwcmd add pass udp from any 123 to ${ip} - $fwcmd add pass udp from ${ip} to any 123 - - # Everything else is denied as default. - $fwcmd add 65000 deny all from any to any - ;; - -simple) - - ############ - # This is a prototype setup for a simple firewall. Configure this machine - # as a named server and ntp server, and point all the machines on the inside - # at this machine for those services. - ############ - - # set these to your outside interface network and netmask and ip - oif="ed0" - onet="192.168.4.0" - omask="255.255.255.0" - oip="192.168.4.17" - - # set these to your inside interface network and netmask and ip - iif="ed1" - inet="192.168.3.0" - imask="255.255.255.0" - iip="192.168.3.17" - - # Stop spoofing - $fwcmd add deny all from ${inet}:${imask} to any in via ${oif} - $fwcmd add deny all from ${onet}:${omask} to any in via ${iif} - - # Stop RFC1918 nets on the outside interface - $fwcmd add deny all from 192.168.0.0:255.255.0.0 to any via ${oif} - $fwcmd add deny all from 172.16.0.0:255.240.0.0 to any via ${oif} - $fwcmd add deny all from 10.0.0.0:255.0.0.0 to any via ${oif} - - # Allow TCP through if setup succeeded - $fwcmd add pass tcp from any to any established - - # Allow setup of incoming email - $fwcmd add pass tcp from any to ${oip} 25 setup - - # Allow access to our DNS - $fwcmd add pass tcp from any to ${oip} 53 setup - - # Allow access to our WWW - $fwcmd add pass tcp from any to ${oip} 80 setup - - # Reject&Log all setup of incoming connections from the outside - $fwcmd add deny log tcp from any to any in via ${oif} setup - - # Allow setup of any other TCP connection - $fwcmd add pass tcp from any to any setup - - # Allow DNS queries out in the world - $fwcmd add pass udp from any 53 to ${oip} - $fwcmd add pass udp from ${oip} to any 53 - - # Allow NTP queries out in the world - $fwcmd add pass udp from any 123 to ${oip} - $fwcmd add pass udp from ${oip} to any 123 - - # Everything else is denied as default. - $fwcmd add 65000 deny all from any to any - ;; - -UNKNOWN|"") - echo "WARNING: firewall rules not loaded." - ;; - -*) # an absolute pathname ? - if [ -f "${firewall_type}" ] ; then - $fwcmd ${firewall_type} - else - echo "WARNING: firewall config script (${firewall_type}) not found," - echo " firewall rules not loaded." - fi - ;; -esac Property changes on: head/release/picobsd/floppy.tree/etc/rc.firewall ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/floppy.tree/etc/ssh/sshd_config =================================================================== --- head/release/picobsd/floppy.tree/etc/ssh/sshd_config (revision 354345) +++ head/release/picobsd/floppy.tree/etc/ssh/sshd_config (nonexistent) @@ -1,28 +0,0 @@ -# $FreeBSD$ -# minimal config for sshd on picobsd -Port 22 -ListenAddress 0.0.0.0 -HostKey /etc/ssh_host_key -#RandomSeed /etc/ssh_random_seed -ServerKeyBits 768 -LoginGraceTime 600 -KeyRegenerationInterval 3600 -PermitRootLogin yes -IgnoreRhosts no -StrictModes yes -X11Forwarding no -X11DisplayOffset 10 -PrintMotd yes -KeepAlive yes -SyslogFacility AUTH -RhostsRSAAuthentication yes -RSAAuthentication yes -PasswordAuthentication yes -PermitEmptyPasswords no -UseLogin no -# CheckMail no -# PidFile /u/zappa/.ssh/pid -# AllowHosts *.our.com friend.other.com -# DenyHosts lowsecurity.theirs.com *.evil.org evil.org -# Umask 022 -# SilentDeny yes Property changes on: head/release/picobsd/floppy.tree/etc/ssh/sshd_config ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/bridge/PICOBSD.hints =================================================================== --- head/release/picobsd/bridge/PICOBSD.hints (revision 354345) +++ head/release/picobsd/bridge/PICOBSD.hints (nonexistent) @@ -1,39 +0,0 @@ -# $FreeBSD$ -hint.fdc.0.at="isa" -hint.fdc.0.port="0x3F0" -hint.fdc.0.irq="6" -hint.fdc.0.drq="2" -hint.fd.0.at="fdc0" -hint.fd.0.drive="0" -hint.ata.0.at="isa" -hint.ata.0.port="0x1F0" -hint.ata.0.irq="14" -hint.ata.1.at="isa" -hint.ata.1.port="0x170" -hint.ata.1.irq="15" -hint.atkbdc.0.at="isa" -hint.atkbdc.0.port="0x060" -hint.atkbd.0.at="atkbdc" -hint.atkbd.0.irq="1" -hint.psm.0.at="atkbdc" -hint.psm.0.irq="12" -hint.vga.0.at="isa" -hint.sc.0.at="isa" -hint.npx.0.at="nexus" -hint.npx.0.port="0x0F0" -hint.npx.0.irq="13" -hint.uart.0.at="isa" -hint.uart.0.port="0x3F8" -hint.uart.0.flags="0x10" -hint.uart.0.irq="4" -hint.uart.1.at="isa" -hint.uart.1.port="0x2F8" -hint.uart.1.irq="3" -hint.ed.0.at="isa" -hint.ed.0.port="0x280" -hint.ed.0.irq="5" -hint.ed.0.maddr="0xd8000" -hint.ed.1.at="isa" -hint.ed.1.port="0x300" -hint.ed.1.irq="5" -hint.ed.1.maddr="0xd0000" Property changes on: head/release/picobsd/bridge/PICOBSD.hints ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/bridge/PICOBSD =================================================================== --- head/release/picobsd/bridge/PICOBSD (revision 354345) +++ head/release/picobsd/bridge/PICOBSD (nonexistent) @@ -1,117 +0,0 @@ -# -# $FreeBSD$ -# -# Line starting with #PicoBSD contains PicoBSD build parameters -#marker def_sz init MFS_inodes floppy_inodes -#PicoBSD 8000 init 8192 32768 -options MD_ROOT_SIZE=8000 # same as def_sz - -hints "PICOBSD.hints" - -# values accessible through getenv() -# env "PICOBSD.env" - -#cpu I486_CPU -cpu I586_CPU -cpu I686_CPU -ident PICOBSD - -options SMP -device apic - -options SCHED_4BSD # mandatory to have one scheduler -#options MATH_EMULATE #Support for x87 emulation -options INET #InterNETworking -#options INET6 -options FFS #Berkeley Fast Filesystem -#options BOOTP #Use BOOTP to obtain IP address/hostname -options MD_ROOT #MD is a potential root device - -#options NFS #Network Filesystem -#options NFS_ROOT #NFS usable as root device, NFS required - -#options MSDOSFS #MSDOS Filesystem -#options CD9660 #ISO 9660 Filesystem -#options CD9660_ROOT #CD-ROM usable as root, CD9660 required -#options DEVFS #Device Filesystem -#options PROCFS #Process filesystem -options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!] - -#options DDB - -options IPFIREWALL -options IPFIREWALL_DEFAULT_TO_ACCEPT -options IPDIVERT # divert (for natd) - -# Support for bridging and bandwidth limiting -options DUMMYNET -device if_bridge -# Running with less than 1000 seems to give poor timing on -# qemu, so we set HZ explicitly. -options HZ=1000 - -device pci - -# Floppy drives -device fdc - -# ATA and ATAPI devices -#device ata -#device atadisk # ATA disk drives -#device atapicd # ATAPI CDROM drives -#options ATA_STATIC_ID #Static device numbering - -# atkbdc0 controls both the keyboard and the PS/2 mouse -device atkbdc # At keyboard controller -device atkbd -#device psm # do we need the mouse ?? - -device vga # VGA screen - -# syscons is the default console driver, resembling an SCO console -device sc - -# Serial (COM) ports -device uart - -# Audio support -#device pcm - -# PCCARD (PCMCIA) support -#device card # pccard bus -#device pcic # PCMCIA bridge - -# Parallel port -#device ppc -#device ppbus # Parallel port bus (required) -#device lpt # Printer -#device plip # TCP/IP over parallel -#device ppi # Parallel port interface device - -# -# The following Ethernet NICs are all PCI devices. -# -device miibus -device fxp # Intel EtherExpress PRO/100B (82557, 82558) -device nfe # nVidia nForce MCP on-board Ethernet -#device xl # 3Com -device rl # RealTek 8129/8139 -device re # RealTek 8139C+/8169/8169S/8110S -device sis # National/SiS -device dc # DEC/Intel 21143 and various workalikes -device ed - -device loop # Network loopback -device ether # Ethernet support -device tun # Packet tunnel. -#device vn #Vnode driver (turns a file into a device) -device pty # Pseudo-ttys (telnet etc) -device md # Memory "disks" -#device gif 4 # IPv6 and IPv4 tunneling -device tap - -#options DEVICE_POLLING - -# The `bpf' device enables the Berkeley Packet Filter. -# Be aware of the administrative consequences of enabling this! -device bpf # Berkeley packet filter Property changes on: head/release/picobsd/bridge/PICOBSD ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/bridge/config =================================================================== --- head/release/picobsd/bridge/config (revision 354345) +++ head/release/picobsd/bridge/config (nonexistent) @@ -1,6 +0,0 @@ -# configuration for picobsd build script. -# $FreeBSD$ -# it should only contain variable definitions -- it is sourced -# by the shell much like rc.conf* files - -fd_size="4096" Property changes on: head/release/picobsd/bridge/config ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/bridge/crunch.conf =================================================================== --- head/release/picobsd/bridge/crunch.conf (revision 354345) +++ head/release/picobsd/bridge/crunch.conf (nonexistent) @@ -1,183 +0,0 @@ -# -# $FreeBSD$ -# -# Configuration file for "bridge" images.. -# -# Depending on your needs, you will almost surely need to -# add/remove/change programs according to your needs. -# Remember that some programs require matching kernel options to -# enable device drivers etc. -# -# To figure out how much space is used by each program, do -# -# size build_dir-bridge/crunch/*lo -# -# Remember that programs require libraries, which add up to the -# total size. The final binary is build_dir-bridge/mfs.tree/stand/crunch -# and you can check which libraries it uses with -# -# ldd build_dir-bridge/mfs.tree/stand/crunch - -# crunchgen configuration to build the crunched binary, see "man crunchgen" -# We need to specify generic build options, the places where to look -# for sources, and the list of program and libraries we want to put -# in the crunched binary. -# -# NOTE: the string "/usr/src" below will be automatically replaced with -# the path set in the 'build' script. - -# Default build options. Basically tell the Makefiles -# that to use the most compact possible version of the code. - -buildopts -DWITHOUT_PAM -DPPP_NO_NETGRAPH -buildopts -DTRACEROUTE_NO_IPSEC -DNO_INET6 -buildopts -DWITHOUT_KERBEROS -DWITHOUT_OPENSSL - -# Directories where to look for sources of various binaries. -# @__CWD__@ is a magic keyword in the picobsd's (Makefile.conf) -# which is replaced with the directory with the picobsd configuration -# corresponding to your image. This way you can have custom sources -# in that directory overriding system programs. - -srcdirs @__CWD__@/src - -# Some programs are especially written for PicoBSD and reside in -# release/picobsd/tinyware. -# Put this entry near the head of the list to override standard binaries. - -srcdirs /usr/src/release/picobsd/tinyware - -# Other standard locations for sources. -# If a program uses its own source directory, add - -srcdirs /usr/src/bin -srcdirs /usr/src/sbin/i386 -srcdirs /usr/src/sbin -srcdirs /usr/src/usr.bin -srcdirs /usr/src/gnu/usr.bin -srcdirs /usr/src/usr.sbin -srcdirs /usr/src/libexec - -# For programs that reside in different places, the best option -# is to use the command "special XXX srcdir YYY" where XXX is the -# program name and YYY is the directory path. -# "special XXX ..." can be used to specify more options, see again -# the crunchgen manpage. - -#--- Basic configuraton -# init is always necessary (unless you have a replacement, oinit) -progs init - -# fsck is almost always necessary, unless you have everything on the -# image and use 'tar' or something similar to read/write raw blocks -# from the floppy. - -progs fsck - -# ifconfig is needed if you want to configure interfaces. -progs ifconfig - -# You will also need a shell and a bunch of utilities. -# The standard shell is not that large, but you need many -# external programs. In fact most of them do not take much space -# as they merely issue a system call, and print the result. -# For a more compact version of shell and utilities, you could -# try busybox, however most system management commands in busybox -# will not work as they use linux-specific interfaces. - -progs sh -ln sh -sh - -# the small utilities -progs echo -progs pwd mkdir rmdir -progs chmod chown -ln chown chgrp -progs mv ln cp rm ls -progs cat tail tee -progs test -ln test [ - -progs less -ln less more -progs mount -progs minigzip -ln minigzip gzip -progs kill -progs df -progs ps -progs ns # this is the picobsd version -ln ns netstat -progs vm -progs hostname -progs login -progs getty -progs stty -progs w -progs msg -ln msg dmesg -progs reboot - -progs sysctl -progs swapon -progs pwd_mkdb -progs umount -progs du -progs passwd - -progs route - -# If you want to run natd, remember the alias library -#progs natd -#libs_so -lalias # natd - -# ppp is rather large. Note that as of Jan.01, RELEASE_CRUNCH -# makes ppp not use libalias, so you cannot have aliasing. -#progs ppp - -# You need an editor. ee is relatively small, though there are -# smaller ones. vi is much larger. -# The editor also usually need a curses library. -progs ee - -progs arp - -# these require libgeom -# progs bsdlabel fdisk mdconfig - -progs kldload kldunload kldstat -progs kldxref -#progs grep -progs date -progs ping -#progs routed -progs ipfw -progs traceroute -progs mdmfs -ln mdmfs mount_mfs -# Various filesystem support -- remember to enable the kernel parts -# progs mount_msdosfs -progs mount_nfs -# progs mount_cd9660 -ln mount_nfs nfs -ln mount_cd9660 cd9660 -#progs newfs -#ln newfs mount_mfs -# ln mount_msdosfs msdos - -# For a small ssh client/server use dropbear - -# Now the libraries -libs_so -lc # the C library -libs_so -ll # used by sh (really ?) -libs_so -lufs # used by mount -### ee uses ncurses but as a dependency -#libs_so -lncurses -libs_so -lm -libs_so -ledit -lutil -libs_so -lcrypt -libs_so -lkvm -libs_so -lz -libs_so -lbsdxml -libs_so -lsbuf -libs_so -ljail # used by ifconfig Property changes on: head/release/picobsd/bridge/crunch.conf ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/bridge/floppy.tree.exclude =================================================================== --- head/release/picobsd/bridge/floppy.tree.exclude (revision 354345) +++ head/release/picobsd/bridge/floppy.tree.exclude (nonexistent) @@ -1,2 +0,0 @@ -etc/snmpd.conf -etc/ppp Property changes on: head/release/picobsd/bridge/floppy.tree.exclude ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/Version =================================================================== --- head/release/picobsd/Version (revision 354345) +++ head/release/picobsd/Version (nonexistent) @@ -1 +0,0 @@ -VER=0.500 Property changes on: head/release/picobsd/Version ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/qemu/PICOBSD.hints =================================================================== --- head/release/picobsd/qemu/PICOBSD.hints (revision 354345) +++ head/release/picobsd/qemu/PICOBSD.hints (nonexistent) @@ -1,39 +0,0 @@ -# $FreeBSD$ -hint.fdc.0.at="isa" -hint.fdc.0.port="0x3F0" -hint.fdc.0.irq="6" -hint.fdc.0.drq="2" -hint.fd.0.at="fdc0" -hint.fd.0.drive="0" -hint.ata.0.at="isa" -hint.ata.0.port="0x1F0" -hint.ata.0.irq="14" -hint.ata.1.at="isa" -hint.ata.1.port="0x170" -hint.ata.1.irq="15" -hint.atkbdc.0.at="isa" -hint.atkbdc.0.port="0x060" -hint.atkbd.0.at="atkbdc" -hint.atkbd.0.irq="1" -hint.psm.0.at="atkbdc" -hint.psm.0.irq="12" -hint.vga.0.at="isa" -hint.sc.0.at="isa" -hint.npx.0.at="nexus" -hint.npx.0.port="0x0F0" -hint.npx.0.irq="13" -hint.uart.0.at="isa" -hint.uart.0.port="0x3F8" -hint.uart.0.flags="0x10" -hint.uart.0.irq="4" -hint.uart.1.at="isa" -hint.uart.1.port="0x2F8" -hint.uart.1.irq="3" -hint.ed.0.at="isa" -hint.ed.0.port="0x280" -hint.ed.0.irq="5" -hint.ed.0.maddr="0xd8000" -hint.ed.1.at="isa" -hint.ed.1.port="0x300" -hint.ed.1.irq="5" -hint.ed.1.maddr="0xd0000" Property changes on: head/release/picobsd/qemu/PICOBSD.hints ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/qemu/PICOBSD =================================================================== --- head/release/picobsd/qemu/PICOBSD (revision 354345) +++ head/release/picobsd/qemu/PICOBSD (nonexistent) @@ -1,123 +0,0 @@ -# -# $FreeBSD$ -# A configuration file to run tests on qemu. -# We disable SMP because it does not work well with qemu, and set HZ=1000 -# to avoid it being overridden. -# -# Line starting with #PicoBSD contains PicoBSD build parameters -#marker def_sz init MFS_inodes floppy_inodes -#PicoBSD 18000 init 8192 32768 -options MD_ROOT_SIZE=18000 # same as def_sz - -hints "PICOBSD.hints" - -# values accessible through getenv() -# env "PICOBSD.env" - -#cpu I486_CPU -cpu I586_CPU -cpu I686_CPU -ident PICOBSD - -# SMP seems to be needed for kern_et -options SMP -device apic - -options SCHED_ULE # mandatory to have one scheduler -options PREEMPTION # needed for decent interrupt processing -#options MATH_EMULATE #Support for x87 emulation -options INET #InterNETworking -#options INET6 -options FFS #Berkeley Fast Filesystem -#options BOOTP #Use BOOTP to obtain IP address/hostname -options MD_ROOT #MD is a potential root device - -#options NFS #Network Filesystem -#options NFS_ROOT #NFS usable as root device, NFS required - -#options MSDOSFS #MSDOS Filesystem -#options CD9660 #ISO 9660 Filesystem -#options CD9660_ROOT #CD-ROM usable as root, CD9660 required -#options DEVFS #Device Filesystem -#options PROCFS #Process filesystem -options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!] - -options KDB -options DDB - -options IPFIREWALL -options IPFIREWALL_DEFAULT_TO_ACCEPT -options IPDIVERT # divert (for natd) - -# Support for bridging and bandwidth limiting -options DUMMYNET -device if_bridge -# Running with less than 1000 seems to give poor timing on -# qemu, so we set HZ explicitly. -options HZ=1000 - -device pci - -# Floppy drives -device fdc - -# ATA and ATAPI devices -#device ata -#device atadisk # ATA disk drives -#device atapicd # ATAPI CDROM drives -#options ATA_STATIC_ID #Static device numbering - -# atkbdc0 controls both the keyboard and the PS/2 mouse -device atkbdc # At keyboard controller -device atkbd -#device psm # do we need the mouse ?? - -device vga # VGA screen - -# syscons is the default console driver, resembling an SCO console -device sc - -# Serial (COM) ports -device uart - -# Audio support -#device pcm - -# PCCARD (PCMCIA) support -#device card # pccard bus -#device pcic # PCMCIA bridge - -# Parallel port -#device ppc -#device ppbus # Parallel port bus (required) -#device lpt # Printer -#device plip # TCP/IP over parallel -#device ppi # Parallel port interface device - -# -# The following Ethernet NICs are all PCI devices. -# -device miibus -device fxp # Intel EtherExpress PRO/100B (82557, 82558) -device nfe # nVidia nForce MCP on-board Ethernet -#device xl # 3Com -device rl # RealTek 8129/8139 -device re # RealTek 8139C+/8169/8169S/8110S -device sis # National/SiS -device dc # DEC/Intel 21143 and various workalikes -device ed - -device loop # Network loopback -device ether # Ethernet support -device tun # Packet tunnel. -device pty # Pseudo-ttys (telnet etc) -device md # Memory "disks" -#device gif 4 # IPv6 and IPv4 tunneling -device tap - -#options VIMAGE # soner or later we may want to test this -#options DEVICE_POLLING - -# The `bpf' device enables the Berkeley Packet Filter. -# Be aware of the administrative consequences of enabling this! -device bpf # Berkeley packet filter Property changes on: head/release/picobsd/qemu/PICOBSD ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/qemu/config =================================================================== --- head/release/picobsd/qemu/config (revision 354345) +++ head/release/picobsd/qemu/config (nonexistent) @@ -1,26 +0,0 @@ -# configuration for picobsd build script. -# $FreeBSD$ -# it should only contain variable definitions -- it is sourced -# by the shell much like rc.conf* files - -fd_size="8192" - -# To copy individual files you can use the function do_copyfiles_user -# as below (find_progs locates the programs and their libraries, -# then you manually copy them. -#copy_files=" -#" -do_copyfiles_user() { - local dst=$1 # the destination root - log "--- put the libraries in /usr/lib to avoid conflicts" - mkdir -p ${dst}/usr/lib - log "-- import dropbear from its build directory --" - find_progs -L / -P /usr/ports/security/dropbear/work/dropbear-0.52 \ - dbclient dropbear - cp -p ${u_progs} ${dst}/bin - cp -p ${u_libs} ${dst}/usr/lib - log "--- also import ssh, scp and sshd ---" - find_progs -L / /usr/bin/ssh /usr/bin/scp /usr/sbin/sshd - cp -p ${u_progs} ${dst}/bin - cp -p ${u_libs} ${dst}/usr/lib -} Property changes on: head/release/picobsd/qemu/config ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/qemu/crunch.conf =================================================================== --- head/release/picobsd/qemu/crunch.conf (revision 354345) +++ head/release/picobsd/qemu/crunch.conf (nonexistent) @@ -1,200 +0,0 @@ -# -# $FreeBSD$ -# -# Configuration file for "qemu" images.. -# -# Depending on your needs, you will almost surely need to -# add/remove/change programs according to your needs. -# Remember that some programs require matching kernel options to -# enable device drivers etc. -# -# To figure out how much space is used by each program, do -# -# size build_dir-bridge/crunch/*lo -# -# Remember that programs require libraries, which add up to the -# total size. The final binary is build_dir-bridge/mfs.tree/stand/crunch -# and you can check which libraries it uses with -# -# ldd build_dir-bridge/mfs.tree/stand/crunch - -# crunchgen configuration to build the crunched binary, see "man crunchgen" -# We need to specify generic build options, the places where to look -# for sources, and the list of program and libraries we want to put -# in the crunched binary. -# -# NOTE: the string "/usr/src" below will be automatically replaced with -# the path set in the 'build' script. - -# Default build options. Basically tell the Makefiles -# that to use the most compact possible version of the code. - -buildopts -DWITHOUT_PAM -DPPP_NO_NETGRAPH -buildopts -DTRACEROUTE_NO_IPSEC -DNO_INET6 -buildopts -DWITHOUT_KERBEROS -DWITHOUT_OPENSSL - -# Directories where to look for sources of various binaries. -# @__CWD__@ is a magic keyword in the picobsd's (Makefile.conf) -# which is replaced with the directory with the picobsd configuration -# corresponding to your image. This way you can have custom sources -# in that directory overriding system programs. - -srcdirs @__CWD__@/src - -# Some programs are especially written for PicoBSD and reside in -# release/picobsd/tinyware. -# Put this entry near the head of the list to override standard binaries. - -srcdirs /usr/src/release/picobsd/tinyware - -# Other standard locations for sources. -# If a program uses its own source directory, add - -srcdirs /usr/src/bin -srcdirs /usr/src/sbin/i386 -srcdirs /usr/src/sbin -srcdirs /usr/src/usr.bin -srcdirs /usr/src/gnu/usr.bin -srcdirs /usr/src/usr.sbin -srcdirs /usr/src/libexec - -# For programs that reside in different places, the best option -# is to use the command "special XXX srcdir YYY" where XXX is the -# program name and YYY is the directory path. -# "special XXX ..." can be used to specify more options, see again -# the crunchgen manpage. - -#--- Basic configuraton -# init is always necessary (unless you have a replacement, oinit) -progs init - -# fsck is almost always necessary, unless you have everything on the -# image and use 'tar' or something similar to read/write raw blocks -# from the floppy. - -progs fsck - -# ifconfig is needed if you want to configure interfaces. -progs ifconfig - -# You will also need a shell and a bunch of utilities. -# The standard shell is not that large, but you need many -# external programs. In fact most of them do not take much space -# as they merely issue a system call, and print the result. -# For a more compact version of shell and utilities, you could -# try busybox, however most system management commands in busybox -# will not work as they use linux-specific interfaces. - -progs sh -ln sh -sh - -# the small utilities -progs echo -progs pwd mkdir rmdir -progs chmod chown -ln chown chgrp -progs mv ln cp rm ls -progs cat tail tee -progs test -ln test [ - -progs less -ln less more -progs mount -progs minigzip -ln minigzip gzip -progs kill -progs df -progs ps -progs ns # this is the picobsd version -ln ns netstat -progs vm -progs hostname -progs login -progs getty -progs stty -progs w -progs msg -ln msg dmesg -progs reboot - -progs sysctl -progs swapon -progs pwd_mkdb -progs umount -progs du -progs passwd - -progs route - -# If you want to run natd, remember the alias library -progs natd -libs_so -lalias # natd -progs tcpdump -special tcpdump srcdir /usr/src/usr.sbin/tcpdump/tcpdump -libs_so -lpcap # used by tcpdump -libs_so -lcrypto # used by tcpdump with inet6 - -# ppp is rather large. Note that as of Jan.01, RELEASE_CRUNCH -# makes ppp not use libalias, so you cannot have aliasing. -#progs ppp - -# You need an editor. ee is relatively small, though there are -# smaller ones. vi is much larger. -# The editor also usually need a curses library. -progs ee - -progs arp - -# these require libgeom -# progs bsdlabel fdisk mdconfig - -progs kldload kldunload kldstat -progs kldxref -progs grep -libs_so -lgnuregex -lbz2 -# dhclient-script requires 'sed' -progs dhclient -progs sed -progs date -progs time -progs ping -progs ping6 -progs tar - -#progs routed -progs ipfw -progs traceroute -progs mdmfs -ln mdmfs mount_mfs -# Various filesystem support -- remember to enable the kernel parts -# progs mount_msdosfs -progs mount_nfs -# progs mount_cd9660 -ln mount_nfs nfs -ln mount_cd9660 cd9660 -#progs newfs -#ln newfs mount_mfs -# ln mount_msdosfs msdos - -# For a small ssh client/server use dropbear -progs jail jexec jls # why not... - - -# Now the libraries -libs_so -lc # the C library -libs_so -ll # used by sh (really ?) -libs_so -lufs # used by mount -### ee uses ncurses but as a dependency -#libs_so -lncurses -libs_so -lm -libs_so -ledit -lutil -libs_so -lcrypt -libs_so -lkvm -libs_so -lz -libs_so -lbsdxml -libs_so -lsbuf -libs_so -ljail # used by ifconfig -libs_so -lipsec -lmd # used with ipv6 -libs_so -larchive -lbz2 -libs_so -llzma # added after 207840 Property changes on: head/release/picobsd/qemu/crunch.conf ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/qemu/floppy.tree.exclude =================================================================== --- head/release/picobsd/qemu/floppy.tree.exclude (revision 354345) +++ head/release/picobsd/qemu/floppy.tree.exclude (nonexistent) @@ -1,2 +0,0 @@ -etc/snmpd.conf -etc/ppp Property changes on: head/release/picobsd/qemu/floppy.tree.exclude ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -y \ No newline at end of property Index: head/release/picobsd/build/mfs.mtree =================================================================== --- head/release/picobsd/build/mfs.mtree (revision 354345) +++ head/release/picobsd/build/mfs.mtree (nonexistent) @@ -1,72 +0,0 @@ -# -# $FreeBSD$ -# -/set type=dir uname=root gname=wheel mode=0755 -. - cdrom - .. - dev - .. - dos - .. - etc - .. - fd - .. - home - user - .. - .. - mnt - .. - mnt1 - .. - mnt2 - .. - proc - .. - root - .. - stand - .. - start_floppy - .. - tftpboot - .. - tmp mode=01777 - .. - usr - local - etc - .. - lib - snmp - .. - .. - .. - share - misc - .. - locale - .. - syscons - .. - nls - .. - .. - .. - var - db - .. - empty - .. - run - .. - spool - lock - .. - .. - .. - wd - .. -.. Property changes on: head/release/picobsd/build/mfs.mtree ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/build/Makefile.conf =================================================================== --- head/release/picobsd/build/Makefile.conf (revision 354345) +++ head/release/picobsd/build/Makefile.conf (nonexistent) @@ -1,60 +0,0 @@ -# $FreeBSD$ -# -# Makefile for building PICOBSD kernels and running crunchgen -# -# Needs SRC pointing to the source tree, -# MY_TREE ponting to my tree -# BUILDDIR pointing to the build directory -# PICO_OBJ pointing to the object directory -# When building a kernel, also need ${name} from the environment -# and CONFIG may indicate an alternate config program - -BINMAKE?=make -SRC?=/usr/src -CONFIG?=config -MODULES?=-DNO_MODULES # do not build them as a default -KERNCONF ?= PICOBSD - -# caller will set MODULES to empty if modules are needed. -# Indeed, it can be used to specify other Makefile options as well. - -# These 3 variables determine where the kernel is built. -# If config were smart enough, we could place the config -# file in some other place than ${SRC}/sys/${TARGET_ARCH}/conf, but -# at the moment (Oct.2001) this is not possible yet. -CONF=${SRC}/sys/${TARGET_ARCH}/conf -#CONF=${BUILDDIR}/conf # XXX does not work yet -CONFFILE=PICOBSD-${name} - -# We can, however, compile the kernel somewhere else -#COMPILE=${CONF}/../compile/${CONFFILE} -COMPILE=${BUILDDIR}/${CONFFILE} - -KERNFILE=${COMPILE}/kernel - -${BUILDDIR}/kernel: ${KERNFILE} - cp -p ${.OODATE} ${.TARGET} - strip ${.TARGET} - strip --remove-section=.note --remove-section=.comment ${.TARGET} - -${KERNFILE}: ${COMPILE} do_a_make_in_the_kernel_directory_anyways - -do_a_make_in_the_kernel_directory_anyways: - (cd ${COMPILE}; ${BINMAKE} KERNEL=kernel ${MODULES} ) - -${COMPILE}: ${CONF}/${CONFFILE} - cd ${CONF}; ${CONFIG} -d ${COMPILE} ${CONFFILE} - -${CONF}/${CONFFILE}: ${KERNCONF} - # -mkdir -p ${CONF} # XXX not needed yet. - cp ${.OODATE} ${.TARGET} - [ -f PICOBSD.hints ] && cp PICOBSD.hints ${CONF}/ - -# This part creates crunch1.conf and crunch.mk from crunch.conf -${BUILDDIR}/crunch.mk: ${BUILDDIR}/crunch1.conf - -(cd ${BUILDDIR}/crunch ; \ - crunchgen -p ${PICO_OBJ} -o -m ${.TARGET} ${.OODATE} ) - -${BUILDDIR}/crunch1.conf: ${MY_TREE}/crunch.conf - (cd ${BUILDDIR}/crunch ; cat ${.OODATE} | \ - sed -e "s@/usr/src@${SRC}@" -e "s+@__CWD__@+${MY_TREE}+" > ${.TARGET} ) Property changes on: head/release/picobsd/build/Makefile.conf ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/build/config =================================================================== --- head/release/picobsd/build/config (revision 354345) +++ head/release/picobsd/build/config (nonexistent) @@ -1,17 +0,0 @@ -# config variables for PicoBSD floppies. -# This file is sourced by the main build script. It should -# only contain assignment to shell variables. -# -# The type-specific "config" file is sourced after this one, so -# you can override things there. - -# STAND_LINKS contains the list of links to be created on the mfs image. -# o_no_devfs is set to an empty string to inform the build script that -# we are using devfs (this need to be done in a less confusing way sometime...) - -STAND_LINKS=${STAND_LINKS:-"bin sbin usr/bin usr/sbin usr/libexec \ - usr/local/bin"} - -o_no_devfs="" # we have devfs. - -# fd_size="2880" # use this variable to set floppy sizes (in KBytes) Property changes on: head/release/picobsd/build/config ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/build/picobsd =================================================================== --- head/release/picobsd/build/picobsd (revision 354345) +++ head/release/picobsd/build/picobsd (nonexistent) @@ -1,1118 +0,0 @@ -#!/bin/sh - -# -# $FreeBSD$ -# This file requires sysutils/makefs to run -# -# The PicoBSD build script. Invoked as -# -# picobsd [options] image_type [site_name] -# -# CWARNFLAGS can be used to pass -Wall or similar options -#export CWARNFLAGS=-D______________sxasxa__________________________ -#export WARNS=2 -# EFIABI... unused attributes ? -export NO_WERROR=1 -# -# Where image_type is a directory with the picobsd config info, -# and ${image_type}/floppy.tree.${site_name} contains -# optional site-specific configuration. -# -# For Options, see the bottom of the file where the processing is -# done. The picobsd(8) manpage might be of some help, but code and docs -# tend to lose sync over time. -# -# This script depends on the following files: -# -# in ${PICO_TREE} : -# Makefile.conf Makefile used to build the kernel -# config shell variables, sourced here. -# mfs.mtree mtree config file -# floppy.tree/ files which go on the floppy -# mfs_tree/ files which go onto the mfs -# -# in ${MY_TREE} : -# PICOBSD kernel config file -# config shell variables, sourced here. -# crunch.conf crunchgen configuration -# mfs.mtree overrides ${PICO_TREE}/mfs.mtree -# floppy.tree.exclude files from floppy.tree/ which we do not need here. -# floppy.tree/ local additions to ${PICO_TREE}/mfs_free -# floppy.tree.${site}/ same as above, site specific. -# mfs_tree/ local additions to the mfs_free -# buildtree.mk optional Makefile to build an extension for floppy tree -# (generated in buildtree/ ) - -# -#--- The main entry point is at the end. -# - -# There are two initialization functions: -# -# + set_defaults -# is run on entry to the script, and is used to set default values -# for all variables that do not depend on image type and source tree. -# -# + set_build_parameters -# is run after command line parsing -# -# VARIABLE NAMES: -# + variables that control operation (e.g. verbosity) and are generally -# set from the command line have o_ ("option") as a name prefix -# -# + variables that contain pathnames and values that should not change -# have c_ ("constant") as a name prefix -# -# + variables exported to Makefiles and subshells are CAPITAL -# -# + variables local to the script are lowercase, possibly with -# an l_ ("local") prefix. -# -# There are unfortunately exceptions: -# name, l_usrtree, l_objtree - -# SRC points to your FreeBSD source tree. -# l_usrtree points to the /usr subdir for the source tree. -# Normally /usr or ${SRC}/../usr -# l_objtree points to the obj tree. Normally ${l_usrtree}/obj-pico-${o_arch} -# c_label is either bsdlabel or disklabel -# PICO_TREE is where standard picobsd stuff resides. -# Normally ${SRC}/release/picobsd -# You can set SRC with --src -# It is not recommended to override the other variables. - -# MY_TREE (set later) is where this floppy type resides. -# BUILDDIR is the build directory - -# log something on stdout if verbose. -o_verbose=0 # this needs to be here! -log() { # message - local foo - [ ${o_verbose} -gt 0 ] && printf "\n*** %s\n" "$*" - [ ${o_verbose} -gt 1 ] && read -p "=== Press enter to continue" foo - return 0 -} - -# unconditionally log and wait for input -logverbose() { # message - local foo - printf "\n*** %s\n" "$*" >&2 - read -p "=== Press enter to continue" foo - return 0 -} - -# set some default values for variables. -# needs to be done as the first thing in the script. - -set_defaults() { # no arguments - # EDITOR is the editor you use - # fd_size floppy size in KB (default to 1440). You can use 1480, - # 1720, 2880, etc. but beware that only 1440 and 1480 will boot - # from 1.44M floppy drives (1480 will not work on vmware). - EDITOR=${EDITOR:-vi} - fd_size=${fd_size:-1440} - - o_all_in_mfs="yes" # put all files in mfs so you can boot - # and run the image via diskless boot. - o_clean="" # set if you want to clean prev.builds. - o_interactive="" # default is interactive - o_verbose=0 # verbose level, 0 is silent - o_tarv="" # tar verbose flag, "" or "v" - o_init_src="" # set to build libs and includes. - o_makeopts=${MAKEOPTS:--s} # make options, be silent by default - o_no_devfs= # default is use devfs. - # You should only set it when building 4.x images - o_do_modules="" # do not build modules - o_arch=`uname -m` # default to amd64 or i386 ... - - SRC="/usr/src" # default location for sources - c_startdir=`pwd` # directory where we start - # used to lookup config and create BUILDDIR - - # XXX 6.x/7.x have a single /boot/boot block, which is the concatenation - # of the old two. For the time being, we keep these, but this should - # be fixed at some point. - - # blocks - c_boot1=/boot/boot1 # boot blocks (in case you want custom ones) - c_boot2=/boot/boot2 - - c_reply=${c_reply:-`mktemp "/tmp/reply.XXXXXXXXXX"`} - # file where User replies will be put - c_mnt=`mktemp -d "/tmp/picobsd.XXXXXXXXXX"` - # mountpoint used to build memory filesystems - c_fs=fs.PICOBSD # filename used for the memory filesystem - c_img=picobsd.bin # filename used for the picobsd image - c_iso=picobsd.iso # filename used for the ISO image - generate_iso="NO" # don't generate the iso image - - # select the right disklabel program - case `uname -r` in - 4.*) - c_label="disklabel" - ;; - *) - c_label="bsdlabel" - ;; - esac - - set -e - - trap fail 2 - #trap fail 3 - #trap fail 6 - trap fail 15 -} - -# use the new build infrastructure to create libraries -# and also to build a specific target -create_includes_and_libraries2() { # opt_dir opt_target - local no - log "create_includes_and_libraries2() for ${SRC} $1" - - no="-DNO_CLEAN -DMK_PROFILE=no -DNO_GAMES -DNO_LIBC_R" # WITHOUT_CDDL=1" - no="$no -DWITHOUT_CASPER" - no="$no -DMALLOC_PRODUCTION" - - ( cd ${SRC}; - # make -DNOCLEAN -DNOPROFILE -DNOGAMES -DNOLIBC_R -DPICOBSD buildworld - if [ -d "$1" ] ; then - cd $1 ; ${BINMAKE} ${o_par} $2 # specific target, e.g. ld-elf.so - else - export MAKEOBJDIRPREFIX=${l_objtree} - make ${o_par} $no toolchain - - # XXX do we need any of these ? - eval export `cd ${SRC}; ${BINMAKE} -f Makefile.inc1 -V WMAKEENV` - [ ${o_arch} != `uname -m` ] && \ - (cd ${l_objtree}; ln -s . ${o_arch}.${o_arch} || true ) - fi - ) -} - - -# set_type [the_site] looks in user or system directories -# for the directory named as the first argument, reads the configuration -# files and sets variables according to the config. -# Also sets MY_TREE and BUILDDIR and SITE - -set_type() { # the_type the_site - local a i - - log "set_type() : Type '$1' site '$2'" - THETYPE=$1 - SITE=$2 - a=$1 - name="" # clear in case of errors - for i in ${c_startdir}/${a} ${PICO_TREE}/${a} ; do - log "set_type: checking $i" - [ -d $i -a -f $i/crunch.conf ] || continue - # look for a kernel config file, privilege arch-specific - l_kernconf=$i/PICOBSD.${o_arch} - [ -f $l_kernconf ] || l_kernconf=$i/PICOBSD - [ -f $l_kernconf ] || continue - set -- `cat $l_kernconf | \ - awk '/^#PicoBSD/ {print $2, $3, $4, $5, $6}'` - [ x"$1" != "x" ] || continue - MFS_SIZE=$1 - name=`(cd $i ; pwd) ` - name=`basename $name` - MY_TREE=$i - BUILDDIR=${c_startdir}/build_dir-${name}-${o_arch} - log "Matching file $name in $i" - return ; - done - logverbose "Type $a NOT FOUND" -} - -clean_tree() { - log "clean_tree()" - if [ -z "${name}" ] ; then - echo "---> Wrong floppy type" - exit 3 - fi - rm -rf ${BUILDDIR} -} - -# prepare a message to be printed in the dialog menus. -set_msgs() { # OK - log "set_msgs()" - - MSG1="Type: ${THETYPE} name $name" - - MSG="PicoBSD build -- Current parameters:\n\n\t1. ${MSG1}\n\ -\t2. MFS size: ${MFS_SIZE} kB\n\ -\t3. Site-info: ${SITE}\n\t4. Full-path: ${MY_TREE}\n" -} - -# Main build procedure. Builds both the disk image and the ISO -build_image() { - log "build_image() <${name}>" - [ -n "${name}" ] || fail $? bad_type - clear - set_msgs - printf "${MSG}---> We'll use the sources living in ${SRC}\n\n" - - # read config variables from a global and then a type-specific file - # basically STAND_LINKS and MY_DEVS, but can also override other - # variables. - # - . ${PICO_TREE}/build/config - [ -f "${MY_TREE}/config" ] && . ${MY_TREE}/config - [ -f "${o_additional_config}" ] && . ${o_additional_config} - - # location of the object directory - PICO_OBJ=${l_objtree}/picobsd/${THETYPE} - log "PICO_OBJ is ${PICO_OBJ}" - - # create build directory and subtree - mkdir -p ${BUILDDIR}/crunch - # remove any old stuff - rm -f ${BUILDDIR}/kernel.gz ${BUILDDIR}/${c_fs} - # invoke commands to build a kernel - do_kernel - # fill a subdirectory with things that go into the floppy - # (mostly /etc and similar stuff) - populate_floppy_fs - # populate it and produce a file with the MFS image - populate_mfs_tree # things which go into mfs - # create, mount and fill a filesystem with floppy image - fill_floppy_image # copies everything into the floppy -} - -# Set build parameters interactively - -main_dialog() { - local ans i l - - log "main_dialog()" - while true ; do - set_msgs - rm ${c_reply} - dialog --menu "PicoBSD build menu -- (29 sep 2001)" 19 70 12 \ - N "--> READY, build it <---" \ - T "${MSG1}" \ - K "edit Kernel config file" \ - E "Edit crunch.conf file" \ - S "MFS Size: ${MFS_SIZE}kB" \ - F "Floppy size: ${fd_size}kB" \ - $ "Site-info: ${SITE}" \ - Q "Quit" \ - 2> ${c_reply} - ans=`cat ${c_reply}` - rm ${c_reply} - case ${ans} in - T) - l="" - for i in ${c_startdir} ${c_startdir}/* ${PICO_TREE}/* ; do - if [ -d $i -a -f $i/PICOBSD -a -f $i/crunch.conf ]; then - l="$l `basename $i` `basename $i`" - fi - done - log $l - { dialog --menu "Setup the type of configuration" 12 70 5 $l \ - 2> ${c_reply} && set_type "`cat ${c_reply}`" ${SITE} ; } || true - ;; - - K) ${EDITOR} ${MY_TREE}/PICOBSD ;; - - E) ${EDITOR} ${MY_TREE}/crunch.conf ;; - - S) - { dialog --title "MFS Size setup" --inputbox \ -"MFS size depends on what you need to put on the MFS image. Typically \ -ranges between 820kB (for very small bridge/router images) to \ -as much as 2500kB kB for a densely packed image. \ -Keep in mind that this memory is \ -totally lost to other programs. Usually you want to keep \ -this as small as possible. " 10 70 2> ${c_reply} \ - && MFS_SIZE=`cat ${c_reply}` ; } || true - ;; - - \$) - { dialog --title "Site info setup" --inputbox \ - "Please enter the full path to the directory \ - containing site-specific setup. \ - This directory tree must contain files that replace \ - standard ones in floppy.tree/ and mfs.tree/ . " \ - 10 70 2> ${c_reply} && SITE=`cat ${c_reply}` ; } || true - ;; - - F) - { dialog --menu "Set floppy size" 15 70 4 \ - 1440 "1.44MB" 1720 "1.72MB" 2880 "2.88MB" 4096 "4MB" \ - 2> ${c_reply} && fd_size=`cat ${c_reply}` ; } || true - ;; - - N) break 2 - ;; - - Q) exit 0 ;; - - *) echo "Unknown option \"${ans}\". Try again." - sleep 2 - clear - ;; - esac - done -} - -# Call the build procedure -# Install image -do_install() { - log "do_install()" - - if [ "${o_interactive}" = "NO" ] ; then - echo "+++ Build completed +++" - cat .build.reply || true - return - fi - dialog --title "Build ${THETYPE} completed" --inputbox \ -"\nThe build process was completed successfully.\n\ -`cat .build.reply` \n\n\ -Now we are going to install the image on the floppy.\n\ -Please insert a blank floppy in /dev/fd0.\\n -WARNING: the contents of the floppy will be permanently erased!\n\ -\n\ -Your options:\n\ - * ^C or [Cancel] to abort,\n\ - * Enter to install ${c_img},\n\ -" 20 80 2> ${c_reply} - if [ "$?" = "0" ]; then - echo "Writing ${c_img}..." - dd if=${BUILDDIR}/${c_img} of=/dev/fd0.${fd_size} - else - echo "Ok, the image is in ${c_img}" - fi - echo "Done." -} - - -#------------------------------------------------------------------- - -# invoke the picobsd Makefile to compile the kernel. -# if MODULES is set (value is irrelevant) the makefile will build modules. -do_kernel() { # OK - log "do_kernel() Preparing kernel \"$name\" in $MY_TREE" - (cd $MY_TREE; export name SRC BUILDDIR # used in this makefile ; - # export CONFIG - export WARNS CWARNFLAGS - [ "${o_do_modules}" = "yes" ] && export MODULES="" - # kernel build not parallelizable yet - ${BINMAKE} KERNCONF=${l_kernconf} \ - -f ${PICO_TREE}/build/Makefile.conf ) || \ - fail $? missing_kernel -} - -# Populate the variable part of the floppy filesystem. Must be done before -# the MFS because its content might need to be copied there as well. -# -# This involves fetching files from three subtrees, in this order: -# -# 1. a standard one, from which type-specific files are excluded; -# 2. a type-specific one; -# 3. a site-specific one. -# -# Files are first copied to a local tree and then compressed. - -populate_floppy_fs() { # OK - local dst excl srcdir - - log "populate_floppy_fs()" - dst=${BUILDDIR}/floppy.tree - log "pwd=`pwd` Populating floppy filesystem..." - - rm -rf ${dst} || true # clean relics from old compilations. - mkdir ${dst} # create a clean tree - - # compute exclude list for generic tree - excl=${MY_TREE}/floppy.tree.exclude - if [ -f ${excl} ] ; then - log "Files excluded from generic tree: `echo;cat ${excl}`" - excl="--exclude-from ${excl}" - else - excl="" - fi - # copy from the floppy trees into the destination - for FLOPPY_TREE in ${PICO_TREE}/floppy.tree ${MY_TREE}/floppy.tree \ - ${MY_TREE}/floppy.tree.${SITE} ; do - if [ -d ${FLOPPY_TREE} ] ; then - (cd ${FLOPPY_TREE} ; tar -cf - \ - --exclude .git --exclude .svn ${excl} . ) | \ - (cd ${dst} ; tar x${o_tarv}f - ) - log "Copied from ${FLOPPY_TREE}" - fi - excl="" # reset the exclude list. - done - - # add local manipulation - if [ -f ${MY_TREE}/buildtree.mk ] ; then - log "building local floppy tree" - ${BINMAKE} -C ${dst} -f ${MY_TREE}/buildtree.mk floppy.tree - fi - - # compress the files in etc/, just in case - # XXX this should be done in the makefile. - # gzip returns an error if it fails to compress some file - (cd $dst ; gzip -9 etc/* - log "Compressed files in etc/ `echo; ls -l etc`" - ) || true -} - -# Copy the specified files to the destination filesystem. -# Each file is specified as a pair "src dst", dst is assumed to be -# a directory (and created with mkdir -p) if it has a trailing / -# Be careful to escape metacharacters. -# You can use ${CROSS} to point to the root of the cross build -# (remember that it might be incomplete) - -do_copyfiles() { # rootdir varname - log Copy files to $1 - local root=$1 - local srcs dst - local CROSS=${_SHLIBDIRPREFIX} - eval set "\${${2}}" - srcs="" - for dst in $* ; do - [ -z "$srcs" ] && srcs=$dst && continue - eval srcs="$srcs" # expand wildcard and vars - case x"$dst" in - */ ) mkdir -p ${root}/${dst} ;; - # * ) mkdir -p `dirname ${root}/${dst}` ;; - esac - cp -p ${srcs} ${root}/${dst} || true - srcs="" - done -} - -# do_links is a helper function to create links between programs -# in stand/ -# This is done reading the names and destination from variable -# links in a config file, in the format -# : dst names - -do_links() { # rootdir varname - local root=$1 - local l i dst - eval l="\${${2}}" - dst="" - log "Create links for ${l}" - (cd ${root}/stand - for i in $l ; do - if [ "$dst" = ":" -o "$i" = ":" ] ; then - dst=$i - elif [ -n "${dst}" ] ; then - ln -s ${dst} ${i} - fi - done - ) -} - -# find_progs is a helper function to locate the named programs -# or libraries in ${o_objdir} or ${_SHLIBDIRPREFIX}, -# and return the full pathnames. -# Called as "find_progs [[-L libpath] [-P binpath]] prog1 prog2 ... " -# On return it sets ${u_progs} to the list of programs, and ${u_libs} -# to the list of shared libraries used. -# -# '-L path' can be used to specify a search path for libraries -# (which searches in $path/lib:$path/usr/lib:$path/usr/local/lib -# '-P binpath' can be used to specify a search path for programs -# (which searches in a lot of places in the subtree) -# -L must be the first, followed by -P -# -# You can use it e.g. in a local confign file by writing -# -# do_copyfiles_user() { -# local dst=$1 -# find_progs nvi sed less grep -# cp -p ${u_progs} ${dst}/bin -# cp -p ${u_libs} ${dst}/lib -# mkdir -p ${dst}/libexec -# find_progs ld-elf.so.1 -# cp -p ${u_progs} ${dst}/libexec # ignore errors -# } - -# find programs and required libraries. Accept -L libs -P path -# if no argument default to objdir/SHLIBDIRPREFIX for both -find_progs() { # programs - # logverbose "find_progs: called with $*" - # rev.284898 removed _SHLIBDIRPREFIX so we need to reconstruct - # its value in i1 - local i1=${_SHLIBDIRPREFIX:-${l_objtree}/${SRC}/tmp} - local i=`realpath ${o_objdir:-${i1}/..}` - - # default values for -L and -P - local dir="-P $i" - local ldir="-L $i" - - while [ "$1" != "" ] ; do - if [ x"$1" = "x-L" -a -d "$2" ] ; then # set lib search path - ldir="-L $2"; shift; shift - elif [ x"$1" = "x-P" -a -d "$2" ] ; then # set prog search path - dir="-P $2"; shift; shift - else - break - fi - done - - # Results are returned in global variables - u_libs="" - u_progs="`find_progs_helper $dir $*`" - [ -z "${u_progs}" ] && return 1 # not found, error - - # use objdump to find libraries. - # Iterate to fetch recursive dependencies. - local tmp="${u_progs}" - local old_libs="" - local pass=1 - while [ $pass -lt 10 ] ; do - pass=$(($pass + 1)) - i="`objdump -x ${tmp} | \ - awk '$1 == "NEEDED" { print $2 }' | sort | uniq | tr '\n' ' '`" - if [ "$old_libs" = "$i" ] ; then - # logverbose "find_progs: have `echo ${u_libs} | wc -w`/`echo ${i} | wc -w` libraries for: $my_progs ($u_progs)" - # logverbose "they are ($i) $u_libs" - return 0 - else - # logverbose "old--- $old_libs --- new +++ $i +++" - fi - u_libs="`find_progs_helper $ldir $i`" - old_libs="$i" - tmp="$tmp $u_libs" - done - log "WARNING: Too many passes, giving up" -} - -# prints to stdout files and libs in the search paths -find_progs_helper() { # first arg is either -P or -L - local ty=$1 dir=$2 ; shift; shift - local progs="`echo $* | tr ' ' '\n' | sort -u | tr '\n' ' '`" - # first, extract absolute pathnames or files in this directory - - # accumulate others in $names - local names="" - local i - for i in $progs ; do - [ -f "$i" ] && echo `realpath $i` && continue - names="${names} $i" - done - # if nothing left, we are done - [ -z "${names}" ] && return 0 - - local depth p - local places="" # places to search - if [ x-P = "x$ty" ] ; then # search programs - depth=2 - p=". local/bin local/sbin local/libexec \ - bin sbin usr/bin usr/sbin libexec gnu/usr.bin \ - secure/usr.bin secure/usr.sbin secure/libexec " - else - depth=3 - p="lib usr/lib gnu/lib secure/lib" - fi - for i in $p ; do - i="${dir}/${i}" - [ -d "${i}" ] && places="${places} `realpath ${i}`" - done - # logverbose "--- looking into $places" - places=`echo ${places} | tr ' ' '\n' | sort -u` - for i in $names ; do - find ${places} -maxdepth $depth -type f -name ${i} | head -1 - done -} - -# Populate the memory filesystem with binaries and non-variable -# configuration files. -# First do an mtree pass, then create directory links and device entries, -# then run crunchgen etc. to build the binary and create links. -# Then copy the specific/generic mfs_tree. -# Finally, if required, make a copy of the floppy.tree onto /fd - -populate_mfs_tree() { - local i j a dst MFS_TREE - - log "populate_mfs_tree()" - dst=${BUILDDIR}/mfs.tree - rm -rf ${dst} || true # clean relics from old compilations. - mkdir ${dst} # create a fresh tree - - log "pwd=`pwd`, Populating MFS tree..." - - # use type-specific mfs.mtree, default to generic one. - a=${MY_TREE}/mfs.mtree - [ -f ${a} ] || a=${PICO_TREE}/build/mfs.mtree - log "Running mtree using $a..." - mtree -deU -f $a -p ${dst} > /dev/null || fail $? mtree - - # Create symlinks using relative pathnames, so it is possible - # to follow them also when building the image. - # Note that names in STAND_LINKS should not have a leading / - for i in ${STAND_LINKS}; do - j=`echo $i | sed -E 's:^[^/]+::;s:/[^/]+:../:g'` - ln -s ${j}stand ${dst}/$i - done - ln -s ../../dev/null ${dst}/var/run/log - ln -s ../../../etc/termcap ${dst}/usr/share/misc/termcap - - ### now build the crunched binaries ### - ( - cd ${BUILDDIR}/crunch - log "Making and installing crunch1 from `pwd` src ${SRC}..." - a=${BUILDDIR}/crunch1.conf - ( export BUILDDIR SRC MY_TREE PICO_OBJ ; - ${BINMAKE} \ - -f ${PICO_TREE}/build/Makefile.conf ${BUILDDIR}/crunch.mk ) - log "Libs are ${LIBS} " - export SRC # used by crunch.mk - # export LIBS CFLAGS - log "Now make -f crunch.mk" - ${BINMAKE} ${o_makeopts} -f ${BUILDDIR}/crunch.mk - strip --remove-section=.note --remove-section=.comment crunch1 - mv crunch1 ${dst}/stand/crunch - chmod 555 ${dst}/stand/crunch - log "Making links for binaries..." - for i in `crunchgen -l $a` ; do - ln ${dst}/stand/crunch ${dst}/stand/${i}; - done - # rm $a # do not remove! - ) || fail $? crunch - - log "Setting up host key for sshd:" - for K in rsa dsa ; do - if [ $K = rsa1 ] ; then - i=ssh_host_key - else - i=ssh_host_${K}_key - fi - if [ -f ${BUILDDIR}/floppy.tree/etc/$i.gz ] ; then - log "Using existing host key $i" - else - log "Generating new host key $i" - ssh-keygen -t $K -f ${BUILDDIR}/floppy.tree/etc/$i \ - -N "" -C "root@picobsd" - gzip -9 ${BUILDDIR}/floppy.tree/etc/${i}* || true - fi - done - - log "Copy generic and site-specific MFS tree..." - for MFS_TREE in ${PICO_TREE}/mfs_tree ${MY_TREE}/mfs_tree ; do - if [ -d ${MFS_TREE} ] ; then - log "Copy ${MFS_TREE} ..." - (cd ${MFS_TREE} ; tar -cf - --exclude .git --exclude .svn . ) | \ - (cd ${dst} ; tar x${o_tarv}f - ) - fi - done - - if [ -f ${MY_TREE}/buildtree.mk ] ; then - log "building local floppy tree" - ${BINMAKE} -C ${dst} -f ${MY_TREE}/buildtree.mk mfs.tree - fi - - if [ "${o_all_in_mfs}" = "yes" ]; then - log "Copy generic floppy_tree into MFS..." - # ignore failure in case the floppy is empty - cp -Rp ${BUILDDIR}/floppy.tree/* ${dst}/fd || true - fi - - # 4.x compatibility - create device nodes - if [ -n "${o_no_devfs}" ] ; then - # create device entries using MAKEDEV - (cd ${dst}/dev - ln -s ${SRC}/etc/MAKEDEV ; chmod 555 MAKEDEV - # log `pwd` - sh ./MAKEDEV ${MY_DEVS} - rm MAKEDEV - ) - fi - if [ "`id -u`" = "0" ] ; then - log "Fixing permissions" - (cd ${dst}; chown -R root . ) - fi - - log "for a shared 'crunch' take libraries and dynamic loader as well" - # /stand/crunch is our main binary, we extract its libs - find_progs ${dst}/stand/crunch - if [ -n "${u_libs}" ] ; then - mkdir -p ${dst}/lib && (cp -p ${u_libs} ${dst}/lib || log "copy libs ${u_libs} failed" ) - mkdir -p ${dst}/libexec - create_includes_and_libraries2 libexec/rtld-elf - find_progs ld-elf.so.1 && ( cp -p ${u_progs} ${dst}/libexec || log "copy ${u_progs} failed" ) - fi - - [ -n "${copy_files}" ] && do_copyfiles ${dst} copy_files - do_copyfiles_user ${dst} || true - [ -n "${links}" ] && do_links ${dst} links - strip ${dst}/libexec/* ${dst}/lib/* 2> /dev/null || true - # strip ${dst}/stand/* 2> /dev/null || true - # The 'import_files' mechanism is deprecated, as it requires - # root permissions to follow the symlinks, and also does - # not let you rename the entries. - if [ -n "${import_files}" ] ; then - log "importing ${import_files} into mfs" - # We do it in a chroot environment on the target so - # symlinks are followed correctly. - # Make sure we have a statically linked tar there. - mkdir -p ${dst}/rescue - cp /rescue/tar ${dst}/rescue - (cd ${l_usrtree}/.. ; tar cf - ${import_files} ) | \ - (chroot ${dst} /rescue/tar xPf - ) - rm -rf ${dst}/rescue - fi - - # final step -- build the mfs image - (cd ${BUILDDIR} - # override the owner - echo "/set uid=0 gid=0" > mtree.out - mtree -ic -p ${dst} -k "" >> mtree.out - log "mtree.out at ${BUILDDIR}/mtree.out size ${MFS_SIZE}k" - makefs -t ffs -o bsize=4096 -o fsize=512 \ - -s ${MFS_SIZE}k -f 1000 -F mtree.out ${c_fs} ${dst} - ls -l ${c_fs} ) - log "done mfs image" -} - -final_cleanup() { - log "final_cleanup()" - rm -rf ${c_mnt} ${c_reply} 2> /dev/null || true -} - -# fail errno errcode -# This function is used to trap errors and print msgs -# -fail() { - local errno errocode where - - errno=$1 - errcode=$2 - where=$3 - echo "---> fail: Error <${errno}> error code <${errcode}> in <${where}>" - case ${errcode} in - mtree) - echo "Error while making hierarchy in ${c_mnt}" - ;; - crunch) - echo "Error while building ${name}." - ;; - missing_kernel) - echo "Error: you must build PICOBSD${suffix} kernel first" - ;; - includes) - echo "Error: failed while making includes" - ;; - libraries) - echo "Error: failed while making libraries" - ;; - bad_type) - echo "Error: unknown floppy type ${name}" - ;; - no_space) - echo "Error: no space left on device (${where})" - ;; - no_mfs) - echo "Error: while writing MFS into the kernel." - ;; - "") - echo "User break" - errcode="userbreak" - ;; - *) - echo "unknown error, maybe user break: $errno $errcode" - ;; - esac - echo "---> Aborting $0" - # try to cleanup the vnode. - final_cleanup - exit 2 -} - -fill_floppy_image() { - local blocks dst mfs_start mfs_end mfs_size img_size - - log "fill_floppy_image()" - dst=${c_mnt} # where to create the image - - log "Preparing ${fd_size}kB floppy filesystem..." - - # correct blocks according to size. - blocks=${fd_size}; - if [ "${blocks}" = "1720" ]; then - blocks=1722 - elif [ "${blocks}" = "1480" ]; then - blocks=1476 - fi - - log "Labeling floppy image" - - dst=${BUILDDIR}/image.tree - rm -rf ${dst} - mkdir -p ${dst} - ( - cd ${BUILDDIR} - # old style mfs lookup, find markers in kernel - set 0 0 # reset variables - # $1 takes the offset of the MFS filesystem - set `strings -at d kernel | grep "MFS Filesystem goes here"` - mfs_start=$1 - set 0 0 # reset variables - set `strings -at d kernel | grep "MFS Filesystem had better"` - mfs_end=$1 - mfs_size="$((${mfs_end} - ${mfs_start}))" - if [ ${mfs_start} = 0 -o ${mfs_end} = 0 ] ; then - # similar to sys/tools/embed_mfs.sh - local x="`objdump -h kernel | grep oldmfs`" - mfs_size=`echo ${x} | awk '{printf("%d", "0x" $3)}' 2> /dev/null` - mfs_start=`echo ${x} | awk '{printf("%d", "0x" $6)}' 2> /dev/null` - if [ ${mfs_start} = 0 -o ${mfs_size} = 0 ] ; then - log "-- old style mfs location not found, have" - logverbose "$x" - fi - fi - set -- `ls -l ${c_fs}`; imgsize="$5" - if [ ${mfs_start} -gt 0 -a ${mfs_size} -ge ${imgsize} ] ; then - mfs_ofs=$((${mfs_start} + 8192)) - log "Preload kernel with file ${c_fs} at ${mfs_ofs}" - log "`ls -l ${c_fs}` to fit in ${mfs_size}" - dd if=${c_fs} ibs=8192 iseek=1 of=kernel obs=${mfs_ofs} \ - oseek=1 conv=notrunc # 2> /dev/null - else - log "not loading mfs, size ${mfs_size} img ${imgsize}" - fi - log "Compress with gzip and copy to floppy image" - - mkdir -p ${dst}/boot/kernel - # XXX loader.conf does not work unless we also load the .4th files - # echo "hint.acpi.0.disabled=\"1\"" > ${dst}/boot/loader.conf - # echo "console=\"comconsole\"" >> ${dst}/boot/loader.conf - local blf="loader* *.4th" # loader.rc loader.4th support.4th" - (cd /boot; cp -p loader ${dst}/boot) || fail $? no_space "copying bootloader" - cp ${MY_TREE}/floppy.tree/boot/loader.conf ${dst}/boot || true - gzip -c kernel > ${dst}/boot/kernel/kernel.gz || fail $? no_space "copying kernel" - - # now transfer the floppy tree. If it is already in mfs, dont bother. - if [ "${o_all_in_mfs}" != "yes" ] ; then - log "Now transfer floppy tree if not already in MFS image" - cp -Rp floppy.tree/* ${dst} || \ - fail $? no_space "copying floppy tree" - fi - ) - - # add local manipulation to the image - if [ -f ${MY_TREE}/buildtree.mk ] ; then - ${BINMAKE} -C ${dst} -f ${MY_TREE}/buildtree.mk image.tree - fi - - log "image used `du -s ${dst}` of ${blocks}k" - if [ "${generate_iso}" = "YES" ]; then - logverbose "generate_iso ${generate_iso}" - # build_iso_image # XXX not implemented yet - (cd ${BUILDDIR} - cp -p /boot/cdboot ${dst}/boot || fail $? no_space "copying cdboot" - mkisofs -b boot/cdboot -no-emul-boot -J -r -ldots -l -L \ - -o ${c_iso} ${dst} - ) - fi - - (cd ${BUILDDIR} - makefs -t ffs -o bsize=4096 -o fsize=512 \ - -s ${blocks}k -f 50 ${c_img} ${dst} - - ${c_label} -w -f `pwd`/${c_img} auto # write in a label - # copy partition c: into a: with some sed magic - ${c_label} -f `pwd`/${c_img} | sed -e '/ c:/{p;s/c:/a:/;}' | \ - ${c_label} -R -f `pwd`/${c_img} /dev/stdin - ${c_label} -f `pwd`/${c_img} - - ls -l ${c_img} - ${c_label} -f `pwd`/${c_img} - log "after disklabel" - ) - - echo "BUILDDIR ${BUILDDIR}" - - # dump the primary and secondary boot - # XXX primary is 512 bytes - dd if=${c_boot1} of=${BUILDDIR}/${c_img} conv=notrunc 2>/dev/null - # XXX secondary starts after the 0x114 = dec 276 bytes of the label - # so we skip 276 from the source, and 276+512=788 from dst - # the old style blocks used 512 and 1024 respectively - - dd if=${c_boot2} iseek=1 ibs=276 2> /dev/null | \ - dd of=${BUILDDIR}/${c_img} oseek=1 obs=788 conv=notrunc 2>/dev/null - log "done disk image" - # XXX (log "Fixing permissions"; cd ${dst}; chown -R root *) - df -ik ${dst} | colrm 70 > .build.reply - # leave build stuff if verbose - [ ${o_verbose} -gt 0 ] && return - - rm -rf ${BUILDDIR}/floppy.tree || true # cleanup - rm -rf ${dst} - rm ${BUILDDIR}/${c_fs} - # rm ${BUILDDIR}/kernel.gz -} - -# This function creates variables which depend on the source tree in use: -# SRC, l_usrtree, l_objtree -# Optionally creates libraries, includes and the like (for cross compiles, -# needs to be done once). - -set_build_parameters() { - if [ "${SRC}" = "/usr/src" ] ; then - l_usrtree=${USR:-/usr} - else - l_usrtree=${USR:-${SRC}/../usr} - fi - l_objtree=${l_usrtree}/obj-pico-${o_arch} - - PICO_TREE=${PICO_TREE:-${SRC}/release/picobsd} - set `grep "#define[\t ]__FreeBSD_version" ${SRC}/sys/sys/param.h` - OSVERSION=$3 - log "OSVERSION is ${OSVERSION}" - - export MAKEOBJDIRPREFIX=${l_objtree} - export TARGET_ARCH=${o_arch} TARGET=${o_arch} - # XXX 20131001 see if CLANG fixes the build - if true; then - echo "--- build with clang" - export WITHOUT_CLANG=yes - export WITHOUT_CLANG_BOOTSTRAP=yes - # export WITH_CLANG_BOOTSTRAP=yes - else - export WITHOUT_CLANG_IS_CC=yes - export WITHOUT_CLANG_BOOTSTRAP=yes - export WITH_GCC=yes - export WITH_GCC_BOOTSTRAP=yes - export WITH_GNUCXX=yes - export WITHOUT_CLANG=yes - export WITHOUT_ICONV=yes - export WITHOUT_TESTS=yes - fi - - # XXX why change machine_arch ? - #-- export MACHINE_ARCH=`uname -m` MACHINE=`uname -m` - # export CWARNFLAGS="-Wextra -Wno-sign-compare -Wno-missing-field-initializers" - # XXX BINMAKE does not really exist anymore - eval "export BINMAKE=\"`cd ${SRC}; make -f Makefile -V BINMAKE`\"" - [ "$BINMAKE" = "" ] && \ - eval "export BINMAKE=\"`cd ${SRC}; make -f Makefile -V SUB_MAKE`\"" - - if [ "${o_init_src}" != "" ] ; then - create_includes_and_libraries2 - else - eval export `cd ${SRC}; ${BINMAKE} -f Makefile.inc1 -V WMAKEENV` - fi - - # if we have o_objdir, find where bin/ is - if [ ! -z "${o_objdir}" ] ; then - if [ -d ${o_objdir}/bin ] ; then - # fine - elif [ -d "${o_objdir}${SRC}/bin" ] ; then - o_objdir="${o_objdir}${SRC}" - log "Changing objdir to ${o_objdir}" - else - log "Cannot find objdir in ${o_objdir}, sorry" - o_objdir="" - fi - fi -} - -#------------------------------------------------------------------- -# Main entry of the script. Initialize variables, parse command line -# arguments. - -1>&2 echo "WARNING: picobsd is deprecated and will be removed in FreeBSD 13.0." - -set_defaults -while [ true ]; do - log "Parsing $1" - case $1 in - -j) - o_par="-j $2" - shift - ;; - - --par) - o_par="-j 8" # watch out, this might be too large - ;; - - --src) # set the source path instead of /usr/src - SRC=`realpath $2` - shift - ;; - - --init) # run a partial buildworld on the source tree - o_init_src="YES" - ;; - - --arch) # override the target architecture - o_arch=$2 - shift - ;; - - --floppy_size) # image size - fd_size=$2 - shift - ;; - - --all_in_mfs) - o_all_in_mfs="yes" - ;; - - --no_all_in_mfs) - o_all_in_mfs="no" - ;; - - --modules) # also build kernel modules - o_do_modules="yes" - ;; - - -n) - o_interactive="NO" - ;; - - -clear|-clean|-c) # clean - o_clean="YES" - o_interactive="NO" - ;; - - -v) # need -v -v to wait for user input - o_verbose=$((${o_verbose}+1)) # verbose level - o_tarv="v" # tar verbose flag - o_makeopts="-d l" # be verbose - ;; - - --iso) # generate iso image - generate_iso="YES" - ;; - - --cfg) # read additional config from this file - o_additional_config=`realpath $2` - shift - ;; - - --objdir) # Place with results of a previous buildworld - # useful if you want to copy shared binaries and libs - o_objdir=`realpath $2` - shift - ;; - - *) - break - ;; - - esac - shift -done - -set_build_parameters # things that depend on ${SRC} -set_type $1 $2 # type and site, respectively - -[ "${o_interactive}" != "NO" ] && main_dialog - -if [ "${o_clean}" = "YES" ] ; then - clean_tree -else - build_image - do_install -fi -final_cleanup -exit 0 Property changes on: head/release/picobsd/build/picobsd ___________________________________________________________________ Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/ns/README =================================================================== --- head/release/picobsd/tinyware/ns/README (revision 354345) +++ head/release/picobsd/tinyware/ns/README (nonexistent) @@ -1,43 +0,0 @@ -Warsaw, 1998.07.20 - - Small replacement for netstat - ----------------------------- - -This program implements some basic functionality subset of normal netstat - -it can display the routing table and protocol statistics. - -Large part of the code dealing with retrieving the routing table via sysctl(3) -was taken from code examples written by Richard Stevens to accompany his -excellent book. - -Usage ------ - - ns [-rsi] [-p proto] [-w wait] - -where - - -r print routing table (default) - -s print protocol statistics - -i print interface statistics - -p proto display only statistics related to this - protocol, where 'proto' is one of: - - ip - - tcp - - udp - - icmp - - bdg - bridging stats, if 'ns' was compiled with - bridging support (flag BRIDGING in Makefile) - -w wait continuous display, repeat every 'wait' seconds. - -Bugs ----- - -* 'ns' doesn't resolve IP addresses to names -* well, real netstat provides _much_ more information... but this one needs - to be small, right? :-) - -Andrzej Bialecki - - -$FreeBSD$ Property changes on: head/release/picobsd/tinyware/ns/README ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/ns/ns.c =================================================================== --- head/release/picobsd/tinyware/ns/ns.c (revision 354345) +++ head/release/picobsd/tinyware/ns/ns.c (nonexistent) @@ -1,831 +0,0 @@ -/*- - * Copyright (c) 1998 Andrzej Bialecki - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - - -/* - * Small replacement for netstat. Uses only sysctl(3) to get the info. - */ - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -char *progname; -int iflag = 0; -int lflag = 0; /* print cpu load info */ -int rflag = 0; -int sflag = 0; -int pflag = 0; -int wflag = 0; /* repeat every wait seconds */ -int delta = 0 ; - -extern char *optarg; -extern int optind; - -void print_load_stats(void); - -void -usage() -{ - fprintf(stderr, "\n%s [-nrsil] [-p proto] [-w wait]\n", progname); - fprintf(stderr, " proto: {ip|tcp|udp|icmp}\n\n"); -} - - -/* - * The following parts related to retrieving the routing table and - * interface information, were borrowed from R. Stevens' code examples - * accompanying his excellent book. Thanks! - */ -char * -sock_ntop(const struct sockaddr *sa, size_t salen) -{ - char portstr[7]; - static char str[128]; /* Unix domain is largest */ - - switch (sa->sa_family) { - case 255: { - int i = 0; - u_long mask; - u_int index = 1 << 31; - u_short new_mask = 0; - - mask = ntohl(((struct sockaddr_in *)sa)->sin_addr.s_addr); - - while (mask & index) { - new_mask++; - index >>= 1; - } - sprintf(str, "/%hu", new_mask); - return (str); - } - case AF_UNSPEC: - case AF_INET: { - struct sockaddr_in *sin = (struct sockaddr_in *)sa; - - if (inet_ntop(AF_INET, &sin->sin_addr, str, sizeof(str)) - == NULL) - return (NULL); - if (ntohs(sin->sin_port) != 0) { - snprintf(portstr, sizeof(portstr), ".%d", - ntohs(sin->sin_port)); - strcat(str, portstr); - } - if (strcmp(str, "0.0.0.0") == 0) - sprintf(str, "default"); - return (str); - } - - case AF_UNIX: { - struct sockaddr_un *unp = (struct sockaddr_un *)sa; - - /* - * OK to have no pathname bound to the socket: - * happens on every connect() unless client calls - * bind() first. - */ - if (unp->sun_path[0] == 0) - strcpy(str, "(no pathname bound)"); - else - snprintf(str, sizeof(str), "%s", unp->sun_path); - return (str); - } - - case AF_LINK: { - struct sockaddr_dl *sdl = (struct sockaddr_dl *)sa; - - if (sdl->sdl_nlen > 0) { - bcopy(&sdl->sdl_data[0], str, sdl->sdl_nlen); - str[sdl->sdl_nlen] = '\0'; - } else - snprintf(str, sizeof(str), "link#%d", sdl->sdl_index); - return (str); - } - - default: - snprintf(str, sizeof(str), - "sock_ntop: unknown AF_xxx: %d, len %d", sa->sa_family, - salen); - return (str); - } - return (NULL); -} - -char * -Sock_ntop(const struct sockaddr *sa, size_t salen) -{ - char *ptr; - - if ((ptr = sock_ntop(sa, salen)) == NULL) - err(1, "sock_ntop error"); /* inet_ntop() sets errno */ - return (ptr); -} - - -#define ROUNDUP(a,size) (((a) & ((size)-1))?(1+((a)|((size)-1))):(a)) - -#define NEXT_SA(ap) \ - ap=(struct sockaddr *) \ - ((caddr_t)ap+(ap->sa_len?ROUNDUP(ap->sa_len,sizeof(u_long)):\ - sizeof(u_long))) - -void -get_rtaddrs(int addrs, struct sockaddr *sa, struct sockaddr **rti_info) -{ - int i; - - for (i = 0; i < RTAX_MAX; i++) { - if (addrs & (1 << i)) { - rti_info[i] = sa; - NEXT_SA(sa); - } else - rti_info[i] = NULL; - } -} - -void -get_flags(char *buf, int flags) -{ - if (flags & 0x1) - strcat(buf, "U"); - if (flags & 0x2) - strcat(buf, "G"); - if (flags & 0x4) - strcat(buf, "H"); - if (flags & 0x8) - strcat(buf, "r"); - if (flags & 0x10) - strcat(buf, "d"); -#ifdef NEVER - if (flags & 0x20) - strcat(buf, "mod,"); -#endif /*NEVER*/ - if (flags & 0x100) - strcat(buf, "C"); - if (flags & 0x400) - strcat(buf, "L"); - if (flags & 0x800) - strcat(buf, "S"); - if (flags & 0x10000) - strcat(buf, "c"); - if (flags & 0x20000) - strcat(buf, "W"); -#ifdef NEVER - if (flags & 0x200000) - strcat(buf, ",LOC"); -#endif /*NEVER*/ - if (flags & 0x400000) - strcat(buf, "b"); -#ifdef NEVER - if (flags & 0x800000) - strcat(buf, ",MCA"); -#endif /*NEVER*/ -} - -void -print_routing(char *proto) -{ - int mib[6]; - int i = 0; - int rt_len; - int if_len; - int if_num; - char *rt_buf; - char *if_buf; - char *next; - char *lim; - struct rt_msghdr *rtm; - struct if_msghdr *ifm; - struct if_msghdr **ifm_table; - struct ifa_msghdr *ifam; - struct sockaddr *sa; - struct sockaddr *sa1; - struct sockaddr *rti_info[RTAX_MAX]; - struct sockaddr **if_table; - struct rt_metrics rm; - char fbuf[50]; - - /* keep a copy of statistics here for future use */ - static unsigned *base_stats = NULL ; - static unsigned base_len = 0 ; - - /* Get the routing table */ - mib[0] = CTL_NET; - mib[1] = PF_ROUTE; - mib[2] = 0; - mib[3] = 0; - mib[4] = NET_RT_DUMP; - mib[5] = 0; - - /*Estimate the size of table */ - if (sysctl(mib, 6, NULL, &rt_len, NULL, 0) == -1) { - perror("sysctl size"); - exit(-1); - } - if ((rt_buf = (char *)malloc(rt_len)) == NULL) { - perror("malloc"); - exit(-1); - } - - /* Now get it. */ - if (sysctl(mib, 6, rt_buf, &rt_len, NULL, 0) == -1) { - perror("sysctl get"); - exit(-1); - } - - /* Get the interfaces table */ - mib[0] = CTL_NET; - mib[1] = PF_ROUTE; - mib[2] = 0; - mib[3] = 0; - mib[4] = NET_RT_IFLIST; - mib[5] = 0; - - /* Estimate the size of table */ - if (sysctl(mib, 6, NULL, &if_len, NULL, 0) == -1) { - perror("sysctl size"); - exit(-1); - } - if ((if_buf = (char *)malloc(if_len)) == NULL) { - perror("malloc"); - exit(-1); - } - - /* Now get it. */ - if (sysctl(mib, 6, if_buf, &if_len, NULL, 0) == -1) { - perror("sysctl get"); - exit(-1); - } - lim = if_buf + if_len; - i = 0; - for (next = if_buf, i = 0; next < lim; next += ifm->ifm_msglen) { - ifm = (struct if_msghdr *)next; - i++; - } - if_num = i; - if_table = (struct sockaddr **)calloc(i, sizeof(struct sockaddr)); - ifm_table = (struct if_msghdr **)calloc(i, sizeof(struct if_msghdr)); - if (iflag) { - printf("\nInterface table:\n"); - printf("----------------\n"); - printf("Name Mtu Network Address " - "Ipkts Ierrs Opkts Oerrs Coll\n"); - } - /* scan the list and store base values */ - i = 0 ; - for (next = if_buf; next < lim; next += ifm->ifm_msglen) { - ifm = (struct if_msghdr *)next; - i++ ; - } - if (base_stats == NULL || i != base_len) { - base_stats = calloc(i*5, sizeof(unsigned)); - base_len = i ; - } - i = 0; - for (next = if_buf; next < lim; next += ifm->ifm_msglen) { - ifm = (struct if_msghdr *)next; - if_table[i] = (struct sockaddr *)(ifm + 1); - ifm_table[i] = ifm; - - sa = if_table[i]; - if (iflag && sa->sa_family == AF_LINK) { - struct sockaddr_dl *sdl = (struct sockaddr_dl *)sa; - unsigned *bp = &base_stats[i*5]; - - printf("%-4s %-5d ", - sock_ntop(if_table[i], if_table[i]->sa_len), - ifm->ifm_data.ifi_mtu); - if (sdl->sdl_alen == 6) { - unsigned char *p = - sdl->sdl_data + sdl->sdl_nlen; - printf("%02x:%02x:%02x:%02x:%02x:%02x ", - p[0], p[1], p[2], p[3], p[4], p[5]); - } else - printf(" "); - printf("%9d%6d%9d%6d%6d\n", - ifm->ifm_data.ifi_ipackets - bp[0], - ifm->ifm_data.ifi_ierrors - bp[1], - ifm->ifm_data.ifi_opackets - bp[2], - ifm->ifm_data.ifi_oerrors - bp[3], - ifm->ifm_data.ifi_collisions -bp[4]); - if (delta > 0) { - bp[0] = ifm->ifm_data.ifi_ipackets ; - bp[1] = ifm->ifm_data.ifi_ierrors ; - bp[2] = ifm->ifm_data.ifi_opackets ; - bp[3] = ifm->ifm_data.ifi_oerrors ; - bp[4] = ifm->ifm_data.ifi_collisions ; - } - } - i++; - } - if (!rflag) { - free(rt_buf); - free(if_buf); - free(if_table); - free(ifm_table); - return; - } - - /* Now dump the routing table */ - printf("\nRouting table:\n"); - printf("--------------\n"); - printf - ("Destination Gateway Flags Netif Use\n"); - lim = rt_buf + rt_len; - for (next = rt_buf; next < lim; next += rtm->rtm_msglen) { - rtm = (struct rt_msghdr *)next; - sa = (struct sockaddr *)(rtm + 1); - get_rtaddrs(rtm->rtm_addrs, sa, rti_info); - if ((sa = rti_info[RTAX_DST]) != NULL) { - sprintf(fbuf, "%s", sock_ntop(sa, sa->sa_len)); - if (((sa1 = rti_info[RTAX_NETMASK]) != NULL) - && sa1->sa_family == 255) { - strcat(fbuf, sock_ntop(sa1, sa1->sa_len)); - } - printf("%-19s", fbuf); - } - if ((sa = rti_info[RTAX_GATEWAY]) != NULL) { - printf("%-19s", sock_ntop(sa, sa->sa_len)); - } - memset(fbuf, 0, sizeof(fbuf)); - get_flags(fbuf, rtm->rtm_flags); - printf("%-10s", fbuf); - for (i = 0; i < if_num; i++) { - ifm = ifm_table[i]; - if ((ifm->ifm_index == rtm->rtm_index) && - (ifm->ifm_data.ifi_type > 0)) { - sa = if_table[i]; - break; - } - } - if (ifm->ifm_type == RTM_IFINFO) { - get_rtaddrs(ifm->ifm_addrs, sa, rti_info); - printf(" %s", Sock_ntop(sa, sa->sa_len)); - } else if (ifm->ifm_type == RTM_NEWADDR) { - ifam = - (struct ifa_msghdr *)ifm_table[rtm->rtm_index - 1]; - sa = (struct sockaddr *)(ifam + 1); - get_rtaddrs(ifam->ifam_addrs, sa, rti_info); - printf(" %s", Sock_ntop(sa, sa->sa_len)); - } - /* printf(" %u", rtm->rtm_use); */ - printf("\n"); - } - free(rt_buf); - free(if_buf); - free(if_table); - free(ifm_table); -} - -void -print_ip_stats(void) -{ - int mib[4]; - int len; - struct ipstat s; - - mib[0] = CTL_NET; - mib[1] = PF_INET; - mib[2] = IPPROTO_IP; -#ifndef IPCTL_STATS - printf("sorry, ip stats not available\n"); - return -1; -#else - mib[3] = IPCTL_STATS; - len = sizeof(struct ipstat); - if (sysctl(mib, 4, &s, &len, NULL, 0) < 0) { - perror("sysctl"); - return; - } - printf("\nIP statistics:\n"); - printf("--------------\n"); - printf(" %10lu total packets received\n", s.ips_total); - printf("* Packets ok:\n"); - printf(" %10lu fragments received\n", s.ips_fragments); - printf(" %10lu forwarded\n", s.ips_forward); -#if __FreeBSD_version > 300001 - printf(" %10lu fast forwarded\n", s.ips_fastforward); -#endif - printf(" %10lu forwarded on same net (redirect)\n", - s.ips_redirectsent); - printf(" %10lu delivered to upper level\n", s.ips_delivered); - printf(" %10lu total ip packets generated here\n", s.ips_localout); - printf(" %10lu total packets reassembled ok\n", s.ips_reassembled); - printf(" %10lu total datagrams successfully fragmented\n", - s.ips_fragmented); - printf(" %10lu output fragments created\n", s.ips_ofragments); - printf(" %10lu total raw IP packets generated\n", s.ips_rawout); - printf("\n* Bad packets:\n"); - printf(" %10lu bad checksum\n", s.ips_badsum); - printf(" %10lu too short\n", s.ips_tooshort); - printf(" %10lu not enough data (too small)\n", s.ips_toosmall); - printf(" %10lu more data than declared in header\n", s.ips_badhlen); - printf(" %10lu less data than declared in header\n", s.ips_badlen); - printf(" %10lu fragments dropped (dups, no mbuf)\n", - s.ips_fragdropped); - printf(" %10lu fragments timed out in reassembly\n", - s.ips_fragtimeout); - printf(" %10lu received for unreachable dest.\n", s.ips_cantforward); - printf(" %10lu unknown or unsupported protocol\n", s.ips_noproto); - printf(" %10lu lost due to no bufs etc.\n", s.ips_odropped); - printf(" %10lu couldn't fragment (DF set, etc.)\n", s.ips_cantfrag); - printf(" %10lu error in IP options processing\n", s.ips_badoptions); - printf(" %10lu dropped due to no route\n", s.ips_noroute); - printf(" %10lu bad IP version\n", s.ips_badvers); - printf(" %10lu too long (more than max IP size)\n", s.ips_toolong); -#if __FreeBSD_version > 300001 - printf(" %10lu multicast for unregistered groups\n", s.ips_notmember); -#endif -#endif -} - -void -print_tcp_stats(void) -{ - int mib[4]; - int len; - struct tcpstat s; - - mib[0] = CTL_NET; - mib[1] = PF_INET; - mib[2] = IPPROTO_TCP; -#ifndef TCPCTL_STATS - printf("sorry, tcp stats not available\n"); - return; -#else - mib[3] = TCPCTL_STATS; - len = sizeof(struct tcpstat); - if (sysctl(mib, 4, &s, &len, NULL, 0) < 0) { - perror("sysctl"); - return; - } - printf("\nTCP statistics:\n"); - printf("---------------\n"); - printf("* Connections:\n"); - printf(" %10lu initiated\n", s.tcps_connattempt); - printf(" %10lu accepted\n", s.tcps_accepts); - printf(" %10lu established\n", s.tcps_connects); - printf(" %10lu dropped\n", s.tcps_drops); - printf(" %10lu embryonic connections dropped\n", s.tcps_conndrops); - printf(" %10lu closed (includes dropped)\n", s.tcps_closed); - printf(" %10lu segments where we tried to get RTT\n", - s.tcps_segstimed); - printf(" %10lu times RTT successfully updated\n", s.tcps_rttupdated); - printf(" %10lu delayed ACKs sent\n", s.tcps_delack); - printf(" %10lu dropped in rxmt timeout\n", s.tcps_timeoutdrop); - printf(" %10lu retrasmit timeouts\n", s.tcps_rexmttimeo); - printf(" %10lu persist timeouts\n", s.tcps_persisttimeo); - printf(" %10lu keepalive timeouts\n", s.tcps_keeptimeo); - printf(" %10lu keepalive probes sent\n", s.tcps_keepprobe); - printf(" %10lu dropped in keepalive\n", s.tcps_keepdrops); - - printf("* Packets sent:\n"); - printf(" %10lu total packets sent\n", s.tcps_sndtotal); - printf(" %10lu data packets sent\n", s.tcps_sndpack); - printf(" %10lu data bytes sent\n", s.tcps_sndbyte); - printf(" %10lu data packets retransmitted\n", s.tcps_sndrexmitpack); - printf(" %10lu data bytes retransmitted\n", s.tcps_sndrexmitbyte); - printf(" %10lu ACK-only packets sent\n", s.tcps_sndacks); - printf(" %10lu window probes sent\n", s.tcps_sndprobe); - printf(" %10lu URG-only packets sent\n", s.tcps_sndurg); - printf(" %10lu window update-only packets sent\n", s.tcps_sndwinup); - printf(" %10lu control (SYN,FIN,RST) packets sent\n", s.tcps_sndctrl); - printf("* Packets received:\n"); - printf(" %10lu total packets received\n", s.tcps_rcvtotal); - printf(" %10lu packets in sequence\n", s.tcps_rcvpack); - printf(" %10lu bytes in sequence\n", s.tcps_rcvbyte); - printf(" %10lu packets with bad checksum\n", s.tcps_rcvbadsum); - printf(" %10lu packets with bad offset\n", s.tcps_rcvbadoff); - printf(" %10lu packets too short\n", s.tcps_rcvshort); - printf(" %10lu duplicate-only packets\n", s.tcps_rcvduppack); - printf(" %10lu duplicate-only bytes\n", s.tcps_rcvdupbyte); - printf(" %10lu packets with some duplicate data\n", - s.tcps_rcvpartduppack); - printf(" %10lu duplicate bytes in partially dup. packets\n", - s.tcps_rcvpartdupbyte); - printf(" %10lu out-of-order packets\n", s.tcps_rcvoopack); - printf(" %10lu out-of-order bytes\n", s.tcps_rcvoobyte); - printf(" %10lu packets with data after window\n", - s.tcps_rcvpackafterwin); - printf(" %10lu bytes received after window\n", - s.tcps_rcvbyteafterwin); - printf(" %10lu packets received after 'close'\n", - s.tcps_rcvafterclose); - printf(" %10lu window probe packets\n", s.tcps_rcvwinprobe); - printf(" %10lu duplicate ACKs\n", s.tcps_rcvdupack); - printf(" %10lu ACKs for unsent data\n", s.tcps_rcvacktoomuch); - printf(" %10lu ACK packets\n", s.tcps_rcvackpack); - printf(" %10lu bytes ACKed by received ACKs\n", s.tcps_rcvackbyte); - printf(" %10lu window update packets\n", s.tcps_rcvwinupd); - printf(" %10lu segments dropped due to PAWS\n", s.tcps_pawsdrop); - printf(" %10lu times header predict ok for ACKs\n", s.tcps_predack); - printf(" %10lu times header predict ok for data packets\n", - s.tcps_preddat); - printf(" %10lu PCB cache misses\n", s.tcps_pcbcachemiss); - printf(" %10lu times cached RTT in route updated\n", - s.tcps_cachedrtt); - printf(" %10lu times cached RTTVAR updated\n", s.tcps_cachedrttvar); - printf(" %10lu times ssthresh updated\n", s.tcps_cachedssthresh); - printf(" %10lu times RTT initialized from route\n", s.tcps_usedrtt); - printf(" %10lu times RTTVAR initialized from route\n", - s.tcps_usedrttvar); - printf(" %10lu times ssthresh initialized from route\n", - s.tcps_usedssthresh); - printf(" %10lu timeout in persist state\n", s.tcps_persistdrop); - printf(" %10lu bogus SYN, e.g. premature ACK\n", s.tcps_badsyn); - printf(" %10lu resends due to MTU discovery\n", s.tcps_mturesent); - printf(" %10lu listen queue overflows\n", s.tcps_listendrop); -#endif -} - -void -print_udp_stats(void) -{ - int mib[4]; - int len; - struct udpstat s; - - mib[0] = CTL_NET; - mib[1] = PF_INET; - mib[2] = IPPROTO_UDP; - mib[3] = UDPCTL_STATS; - len = sizeof(struct udpstat); - if (sysctl(mib, 4, &s, &len, NULL, 0) < 0) { - perror("sysctl"); - return; - } - printf("\nUDP statistics:\n"); - printf("---------------\n"); - printf("* Packets received:\n"); - printf(" %10lu total input packets\n", s.udps_ipackets); - printf(" %10lu packets shorter than header (dropped)\n", - s.udps_hdrops); - printf(" %10lu bad checksum\n", s.udps_badsum); - printf(" %10lu data length larger than packet\n", s.udps_badlen); - printf(" %10lu no socket on specified port\n", s.udps_noport); - printf(" %10lu of above, arrived as broadcast\n", s.udps_noportbcast); - printf(" %10lu not delivered, input socket full\n", s.udps_fullsock); - printf(" %10lu packets missing PCB cache\n", s.udpps_pcbcachemiss); - printf(" %10lu packets not for hashed PCBs\n", s.udpps_pcbhashmiss); - printf("* Packets sent:\n"); - printf(" %10lu total output packets\n", s.udps_opackets); -#if __FreeBSD_version > 300001 - printf(" %10lu output packets on fast path\n", s.udps_fastout); -#endif -} - -char *icmp_names[] = { - "echo reply", - "#1", - "#2", - "destination unreachable", - "source quench", - "routing redirect", - "#6", - "#7", - "echo", - "router advertisement", - "router solicitation", - "time exceeded", - "parameter problem", - "time stamp", - "time stamp reply", - "information request", - "information request reply", - "address mask request", - "address mask reply", -}; - -print_icmp_stats() -{ - int mib[4]; - int len; - int i; - struct icmpstat s; - - mib[0] = CTL_NET; - mib[1] = PF_INET; - mib[2] = IPPROTO_ICMP; - mib[3] = ICMPCTL_STATS; - len = sizeof(struct icmpstat); - if (sysctl(mib, 4, &s, &len, NULL, 0) < 0) { - perror("sysctl"); - return (-1); - } - printf("\nICMP statistics:\n"); - printf("----------------\n"); - printf("* Output histogram:\n"); - for (i = 0; i < (ICMP_MAXTYPE + 1); i++) { - if (s.icps_outhist[i] > 0) - printf("\t%10lu %s\n", - s.icps_outhist[i], icmp_names[i]); - } - printf("* Input histogram:\n"); - for (i = 0; i < (ICMP_MAXTYPE + 1); i++) { - if (s.icps_inhist[i] > 0) - printf("\t%10lu %s\n", - s.icps_inhist[i], icmp_names[i]); - } - printf("* Other stats:\n"); - printf(" %10lu calls to icmp_error\n", s.icps_error); - printf(" %10lu no error 'cuz old ip too short\n", s.icps_oldshort); - printf(" %10lu no error 'cuz old was icmp\n", s.icps_oldicmp); - - printf(" %10lu icmp code out of range\n", s.icps_badcode); - printf(" %10lu packets shorter than min length\n", s.icps_tooshort); - printf(" %10lu bad checksum\n", s.icps_checksum); - printf(" %10lu calculated bound mismatch\n", s.icps_badlen); - printf(" %10lu number of responses\n", s.icps_reflect); - printf(" %10lu broad/multi-cast echo requests dropped\n", - s.icps_bmcastecho); - printf(" %10lu broad/multi-cast timestamp requests dropped\n", - s.icps_bmcasttstamp); -} - -int -stats(char *proto) -{ - if (!sflag) - return 0; - if (pflag) { - if (proto == NULL) { - fprintf(stderr, "Option '-p' requires parameter.\n"); - usage(); - exit(-1); - } - if (strcmp(proto, "ip") == 0) - print_ip_stats(); - if (strcmp(proto, "icmp") == 0) - print_icmp_stats(); - if (strcmp(proto, "udp") == 0) - print_udp_stats(); - if (strcmp(proto, "tcp") == 0) - print_tcp_stats(); - return (0); - } - print_ip_stats(); - print_icmp_stats(); - print_udp_stats(); - print_tcp_stats(); - return (0); -} - -int -main(int argc, char *argv[]) -{ - char c; - char *proto = NULL; - - progname = argv[0]; - - while ((c = getopt(argc, argv, "dilnrsp:w:")) != -1) { - switch (c) { - case 'd': /* print deltas in stats every w seconds */ - delta++ ; - break; - case 'w': - wflag = atoi(optarg); - break; - case 'n': /* ignored, just for compatibility with std netstat */ - break; - case 'r': - rflag++; - break; - case 'i': - iflag++; - break; - case 'l': - lflag++; - break; - case 's': - sflag++; - rflag = 0; - break; - case 'p': - pflag++; - sflag++; - proto = optarg; - break; - case '?': - default: - usage(); - exit(0); - break; - } - } - if (rflag == 0 && sflag == 0 && iflag == 0) - rflag = 1; - argc -= optind; - - if (argc > 0) { - usage(); - exit(-1); - } - if (wflag) - printf("\033[H\033[J"); -again: - if (wflag) { - struct timeval t; - - gettimeofday(&t, NULL); - printf("\033[H%s", ctime(&t.tv_sec)); - } - print_routing(proto); - print_load_stats(); - stats(proto); - if (wflag) { - sleep(wflag); - goto again; - } - exit(0); -} - -void -print_load_stats(void) -{ - static u_int32_t cp_time[5]; - u_int32_t new_cp_time[5]; - int l; - int shz; - static int stathz ; - - if (!lflag || !wflag) - return; - l = sizeof(new_cp_time) ; - bzero(new_cp_time, l); - if (sysctlbyname("kern.cp_time", new_cp_time, &l, NULL, 0) < 0) { - warn("sysctl: retrieving cp_time length"); - return; - } - if (stathz == 0) { - struct clockinfo ci; - - bzero (&ci, sizeof(ci)); - l = sizeof(ci) ; - if (sysctlbyname("kern.clockrate", &ci, &l, NULL, 0) < 0) { - warn("sysctl: retrieving clockinfo length"); - return; - } - stathz = ci.stathz ; - bcopy(new_cp_time, cp_time, sizeof(cp_time)); - } - shz = stathz * wflag ; - if (shz == 0) - shz = 1; -#define X(i) ( (double)(new_cp_time[i] - cp_time[i])*100/shz ) - printf("\nUSER %5.2f%% NICE %5.2f%% SYS %5.2f%% " - "INTR %5.2f%% IDLE %5.2f%%\n", - X(0), X(1), X(2), X(3), X(4) ); - bcopy(new_cp_time, cp_time, sizeof(cp_time)); -} Property changes on: head/release/picobsd/tinyware/ns/ns.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/ns/Makefile =================================================================== --- head/release/picobsd/tinyware/ns/Makefile (revision 354345) +++ head/release/picobsd/tinyware/ns/Makefile (nonexistent) @@ -1,9 +0,0 @@ -# $FreeBSD$ - -PROG= ns -SRCS= ns.c - -CFLAGS+= -DBRIDGING -MAN= - -.include Property changes on: head/release/picobsd/tinyware/ns/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/vm/README =================================================================== --- head/release/picobsd/tinyware/vm/README (revision 354345) +++ head/release/picobsd/tinyware/vm/README (nonexistent) @@ -1,10 +0,0 @@ -1998.02.12 - -This is a small replacement for vmstat(8) program. It allows you to measure -current memory utilisation. The same info is available via sysctl(8) program, -but unfortunately this particular variable doesn't have its handler, and -consequently it is not displayed in stock version of sysctl(8). - - - -$FreeBSD$ Property changes on: head/release/picobsd/tinyware/vm/README ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/vm/vm.c =================================================================== --- head/release/picobsd/tinyware/vm/vm.c (revision 354345) +++ head/release/picobsd/tinyware/vm/vm.c (nonexistent) @@ -1,112 +0,0 @@ -/*- - * Copyright (c) 1998 Andrzej Bialecki - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include -#include -#include -#include -#include - -#define pgtok(a) ((a) * (u_int) pagesize >> 10) - -int -vm_i() -{ -#define CNT 49 - int cnt[CNT]; - char names[CNT*16]; - char *a, *namep[CNT*16]; - int i,len; - long long inttotal=0; - long uptime=1; - - len=sizeof(cnt); - i = sysctlbyname("hw.intrcnt", &cnt, &len, NULL, 0); - if (i != 0) - return i ; - len=sizeof(names); - i = sysctlbyname("hw.intrnames", &names, &len, NULL, 0); - if (i != 0) - return i ; - - for( i=0, a = names ; i < CNT && a < names+sizeof(names) ; ) { - namep[i++] = a++; - while (a < names+sizeof(names) && *a) - a++ ; - a++ ; /* skip \0 */ - } - printf("interrupt total rate\n"); - inttotal = 0; - for (i=0; i< CNT ; i++) - if (cnt[i] >0) { - printf("%-12s %20lu %10lu\n", namep[i], cnt[i], cnt[i]/uptime); - inttotal += cnt[i]; - } - printf("Total %20llu %10llu\n", inttotal, - inttotal / (u_int64_t) uptime); - return 0; -} -int -main(int argc, char *argv[]) -{ - int mib[2],i=0,len; - int pagesize, pagesize_len; - struct vmtotal v; - - if (argc > 1 && !strcmp(argv[1], "-i")) { - if (vm_i()) - fprintf(stderr, "vm -i stats not available via sysctl\n"); - return 0 ; - } - pagesize_len = sizeof(int); - sysctlbyname("vm.stats.vm.v_page_size",&pagesize,&pagesize_len,NULL,0); - - len=sizeof(struct vmtotal); - mib[0]=CTL_VM; - mib[1]=VM_METER; - for(;;) { - sysctl(mib,2,&v,&len,NULL,0); - if(i==0) { - printf(" procs kB virt mem real mem shared vm shared real free\n"); - printf(" r w l s tot act tot act tot act tot act\n"); - } - printf("%2hd%2hd%2hd%2hd",v.t_rq-1,v.t_dw+v.t_pw,v.t_sl,v.t_sw); - printf("%7d %7d %7d%7d", - pgtok(v.t_vm),pgtok(v.t_avm), - pgtok(v.t_rm),pgtok(v.t_arm)); - printf("%7d%7d%7d%7d%7d\n", - pgtok(v.t_vmshr),pgtok(v.t_avmshr), - pgtok(v.t_rmshr),pgtok(v.t_armshr), - pgtok(v.t_free)); - sleep(5); - i++; - if(i>22) i=0; - } - exit(0); - -} Property changes on: head/release/picobsd/tinyware/vm/vm.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/vm/Makefile =================================================================== --- head/release/picobsd/tinyware/vm/Makefile (revision 354345) +++ head/release/picobsd/tinyware/vm/Makefile (nonexistent) @@ -1,10 +0,0 @@ -# $FreeBSD$ -# -PROG=vm -#CFLAGS+= -SRCS= vm.c -MAN= - -.include - - Property changes on: head/release/picobsd/tinyware/vm/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/aps/main.c =================================================================== --- head/release/picobsd/tinyware/aps/main.c (revision 354345) +++ head/release/picobsd/tinyware/aps/main.c (nonexistent) @@ -1,101 +0,0 @@ -/*- - * Copyright (c) 1998 Andrzej Bialecki - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - * - */ - -#include -#include -#include -#include - -/* - * Ok, I could extract almost anything from /proc, but I'm too lazy... - * I think it will suffice for now. - */ - -int -main(int argc, char *argv[]) -{ - DIR *d; - struct dirent *e; - FILE *fd; - char buf[100]; - char *tok, *sep=" ", *sep1=","; - char *name, *pid, *ppid, *uid, *gid; - char *pgid, *sid, *tty, *cred; - char *major, *minor; - char con[10]; - - d=opendir("/proc"); - printf(" PID PPID TTY COMMAND\n"); - while((e=readdir(d))!=NULL) { - /* Skip '.' and '..' */ - if(e->d_name[0]=='.') continue; - /* Skip 'curproc' - it's us */ - if(e->d_name[0]=='c') continue; - sprintf(buf,"/proc/%s/status",e->d_name); - fd=fopen(buf,"r"); - fgets(buf,99,fd); - fclose(fd); - name=strtok(buf,sep); - pid=strtok(NULL,sep); - ppid=strtok(NULL,sep); - pgid=strtok(NULL,sep); - sid=strtok(NULL,sep); - tty=strtok(NULL,sep); - tok=strtok(NULL,sep); /* flags */ - tok=strtok(NULL,sep); /* start */ - tok=strtok(NULL,sep); /* user time */ - tok=strtok(NULL,sep); /* system time */ - tok=strtok(NULL,sep); /* wchan */ - cred=strtok(NULL,sep); /* credentials */ - major=strtok(tty,sep1); - minor=strtok(NULL,sep1); - if(strcmp(minor,"-1")==0) { - minor="?"; - } - if(strcmp(major,"-1")==0) { - major="?"; - } else if(strcmp(major,"12")==0) { - major="v"; - } else if(strcmp(major,"0")==0) { - major="con"; - minor="-"; - } else if(strcmp(major,"5")==0) { - major="p"; - } else major="x"; - if((strcmp(major,"v")==0) && (strcmp(minor,"255")==0)) { - major="con"; - minor="-"; - } - sprintf(con,"%s%s",major,minor); - printf("%5s %5s %4s (%s)\n",pid,ppid,con,name); - - } - closedir(d); - exit(0); -} Property changes on: head/release/picobsd/tinyware/aps/main.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/aps/README =================================================================== --- head/release/picobsd/tinyware/aps/README (revision 354345) +++ head/release/picobsd/tinyware/aps/README (nonexistent) @@ -1,19 +0,0 @@ -1998.07.12 - -This is a small 'ps' replacement, which uses information available via -procfs(5) interface. It's primitive, but gives you the most important -informations, i.e. how many processes are running and on which vty, and the -pid number to kill some of them. :-) - -When I have some time, I'll add usual switches and other functions that normal -'ps' has... - -Also, what I'm now inclined to think is that it should be reworked to use -more general (and less complicated) sysctl(3). - - - -(As of 1998.07.31 this program is no longer used in PicoBSD. See sps(1) in -TinyWare collection). - -$FreeBSD$ Property changes on: head/release/picobsd/tinyware/aps/README ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/aps/Makefile =================================================================== --- head/release/picobsd/tinyware/aps/Makefile (revision 354345) +++ head/release/picobsd/tinyware/aps/Makefile (nonexistent) @@ -1,9 +0,0 @@ -# $FreeBSD$ -# -PROG=ps -SRCS+=main.c -MAN= - -.include - - Property changes on: head/release/picobsd/tinyware/aps/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/passwd/local_passwd.c =================================================================== --- head/release/picobsd/tinyware/passwd/local_passwd.c (revision 354345) +++ head/release/picobsd/tinyware/passwd/local_passwd.c (nonexistent) @@ -1,239 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-4-Clause - * - * Copyright (c) 1990, 1993, 1994 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -static const char sccsid[] = "@(#)local_passwd.c 8.3 (Berkeley) 4/2/94"; -#endif /* not lint */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#ifdef YP -#include -#endif - -#ifdef LOGGING -#include -#endif - -#ifdef LOGIN_CAP -#ifdef AUTH_NONE /* multiple defs :-( */ -#undef AUTH_NONE -#endif -#include -#endif - -#include "extern.h" - -static uid_t uid; -int randinit; - -extern void -pw_copy(int ffd, int tfd, struct passwd *pw, struct passwd *old_pw); - -char *tempname; - -static unsigned char itoa64[] = /* 0 ... 63 => ascii - 64 */ - "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - -void -to64(s, v, n) - char *s; - long v; - int n; -{ - while (--n >= 0) { - *s++ = itoa64[v&0x3f]; - v >>= 6; - } -} - -char * -getnewpasswd(pw, nis) - struct passwd *pw; - int nis; -{ - int tries, min_length = 6; - int force_mix_case = 1; - char *p, *t; -#ifdef LOGIN_CAP - login_cap_t * lc; -#endif - char buf[_PASSWORD_LEN+1], salt[32]; - struct timeval tv; - - if (!nis) - (void)printf("Changing local password for %s.\n", pw->pw_name); - - if (uid && pw->pw_passwd[0] && - strcmp(crypt(getpass("Old password:"), pw->pw_passwd), - pw->pw_passwd)) { - errno = EACCES; - pw_error(NULL, 1, 1); - } - -#ifdef LOGIN_CAP - /* - * Determine minimum password length, next password change date, - * and whether or not to force mixed case passwords. - * Note that even for NIS passwords, login_cap is still used. - */ - if ((lc = login_getpwclass(pw)) != NULL) { - time_t period; - - /* minpasswordlen capablity */ - min_length = (int)login_getcapnum(lc, "minpasswordlen", - min_length, min_length); - /* passwordtime capability */ - period = login_getcaptime(lc, "passwordtime", 0, 0); - if (period > (time_t)0) { - pw->pw_change = time(NULL) + period; - } - /* mixpasswordcase capability */ - force_mix_case = login_getcapbool(lc, "mixpasswordcase", 1); - } -#endif - - for (buf[0] = '\0', tries = 0;;) { - p = getpass("New password:"); - if (!*p) { - (void)printf("Password unchanged.\n"); - pw_error(NULL, 0, 0); - } - if (strlen(p) < min_length && (uid != 0 || ++tries < 2)) { - (void)printf("Please enter a password at least %d characters in length.\n", min_length); - continue; - } - - if (force_mix_case) { - for (t = p; *t && islower(*t); ++t); - if (!*t && (uid != 0 || ++tries < 2)) { - (void)printf("Please don't use an all-lower case password.\nUnusual capitalization, control characters or digits are suggested.\n"); - continue; - } - } - (void)strcpy(buf, p); - if (!strcmp(buf, getpass("Retype new password:"))) - break; - (void)printf("Mismatch; try again, EOF to quit.\n"); - } - /* grab a random printable character that isn't a colon */ - if (!randinit) { - randinit = 1; - srandomdev(); - } -#ifdef NEWSALT - salt[0] = _PASSWORD_EFMT1; - to64(&salt[1], (long)(29 * 25), 4); - to64(&salt[5], random(), 4); - salt[9] = '\0'; -#else - /* Make a good size salt for algorithms that can use it. */ - gettimeofday(&tv,0); -#ifdef LOGIN_CAP - if (login_setcryptfmt(lc, "md5", NULL) == NULL) - pw_error("cannot set password cipher", 1, 1); - login_close(lc); -#else - (void)crypt_set_format("md5"); -#endif - /* Salt suitable for anything */ - to64(&salt[0], random(), 3); - to64(&salt[3], tv.tv_usec, 3); - to64(&salt[6], tv.tv_sec, 2); - to64(&salt[8], random(), 5); - to64(&salt[13], random(), 5); - to64(&salt[17], random(), 5); - to64(&salt[22], random(), 5); - salt[27] = '\0'; -#endif - return (crypt(buf, salt)); -} - -int -local_passwd(uname) - char *uname; -{ - struct passwd *pw; - int pfd, tfd; - - if (!(pw = getpwnam(uname))) - errx(1, "unknown user %s", uname); - -#ifdef YP - /* Use the right password information. */ - pw = (struct passwd *)&local_password; -#endif - uid = getuid(); - if (uid && uid != pw->pw_uid) - errx(1, "%s", strerror(EACCES)); - - pw_init(); - - /* - * Get the new password. Reset passwd change time to zero by - * default. If the user has a valid login class (or the default - * fallback exists), then the next password change date is set - * by getnewpasswd() according to the "passwordtime" capability - * if one has been specified. - */ - pw->pw_change = 0; - pw->pw_passwd = getnewpasswd(pw, 0); - - pfd = pw_lock(); - tfd = pw_tmp(); - pw_copy(pfd, tfd, pw, NULL); - - if (!pw_mkdb(uname)) - pw_error((char *)NULL, 0, 1); -#ifdef LOGGING - syslog(LOG_DEBUG, "user %s changed their local password\n", uname); -#endif - return (0); -} Property changes on: head/release/picobsd/tinyware/passwd/local_passwd.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/passwd/pw_util.h =================================================================== --- head/release/picobsd/tinyware/passwd/pw_util.h (revision 354345) +++ head/release/picobsd/tinyware/passwd/pw_util.h (nonexistent) @@ -1,46 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-4-Clause - * - * Copyright (c) 1994 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)pw_util.h 8.2 (Berkeley) 4/1/94 - * - * $FreeBSD$ - */ - -void pw_edit(int); -void pw_error(const char *, int, int); -void pw_init(void); -int pw_lock(void); -int pw_mkdb(const char *); -void pw_prompt(void); -int pw_tmp(void); Property changes on: head/release/picobsd/tinyware/passwd/pw_util.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/passwd/passwd.c =================================================================== --- head/release/picobsd/tinyware/passwd/passwd.c (revision 354345) +++ head/release/picobsd/tinyware/passwd/passwd.c (nonexistent) @@ -1,195 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-4-Clause - * - * Copyright (c) 1988, 1993, 1994 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -static const char copyright[] = -"@(#) Copyright (c) 1988, 1993, 1994\n\ - The Regents of the University of California. All rights reserved.\n"; -#endif /* not lint */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)passwd.c 8.3 (Berkeley) 4/2/94"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include - -#include -#include -#include -#include -#include -#include -#include - -#ifdef YP -#include -#include -#include -int __use_yp = 0; -int yp_errno = YP_TRUE; -extern int yp_passwd( char * ); -#endif - -#include "extern.h" - -static void usage(void); - -int use_local_passwd = 0; - -int -main(argc, argv) - int argc; - char **argv; -{ - int ch; - char *uname; - -#ifdef YP -#define OPTIONS "d:h:lysfo" -#else -#define OPTIONS "l" -#endif - -#ifdef YP - int res = 0; - - if (strstr(argv[0], "yppasswd")) __use_yp = 1; -#endif - - while ((ch = getopt(argc, argv, OPTIONS)) != -1) { - switch (ch) { - case 'l': /* change local password file */ - use_local_passwd = 1; - break; -#ifdef YP - case 'y': /* Change NIS password */ - __use_yp = 1; - break; - case 'd': /* Specify NIS domain. */ -#ifdef PARANOID - if (!getuid()) { -#endif - yp_domain = optarg; - if (yp_server == NULL) - yp_server = "localhost"; -#ifdef PARANOID - } else { - warnx("only the super-user may use the -d flag"); - } -#endif - break; - case 'h': /* Specify NIS server. */ -#ifdef PARANOID - if (!getuid()) { -#endif - yp_server = optarg; -#ifdef PARANOID - } else { - warnx("only the super-user may use the -h flag"); - } -#endif - break; - case 'o': - force_old++; - break; -#endif - default: - case '?': - usage(); - } - } - - argc -= optind; - argv += optind; - - if ((uname = getlogin()) == NULL) - err(1, "getlogin"); - - switch(argc) { - case 0: - break; - case 1: - uname = argv[0]; - break; - default: - usage(); - } - -#ifdef YP - /* - * If NIS is turned on in the password database, use it, else punt. - */ - res = use_yp(uname, 0, 0); - if (res == USER_YP_ONLY) { - if (!use_local_passwd) { - exit(yp_passwd(uname)); - } else { - /* - * Reject -l flag if NIS is turned on and the user - * doesn't exist in the local password database. - */ - errx(1, "unknown local user: %s", uname); - } - } else if (res == USER_LOCAL_ONLY) { - /* - * Reject -y flag if user only exists locally. - */ - if (__use_yp) - errx(1, "unknown NIS user: %s", uname); - } else if (res == USER_YP_AND_LOCAL) { - if (!use_local_passwd && (yp_in_pw_file || __use_yp)) - exit(yp_passwd(uname)); - } -#endif - - exit(local_passwd(uname)); -} - -static void -usage() -{ - -#ifdef YP - (void)fprintf(stderr, - "usage: passwd [-l] [-y] [-o] [-d domain [-h host]] [user]\n"); -#else - (void)fprintf(stderr, "usage: passwd [-l] user\n"); -#endif - exit(1); -} Property changes on: head/release/picobsd/tinyware/passwd/passwd.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/passwd/extern.h =================================================================== --- head/release/picobsd/tinyware/passwd/extern.h (revision 354345) +++ head/release/picobsd/tinyware/passwd/extern.h (nonexistent) @@ -1,40 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-4-Clause - * - * Copyright (c) 1994 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * From: @(#)extern.h 8.1 (Berkeley) 4/2/94 - * $FreeBSD$ - */ - -int krb_passwd(char *, char *, char *, char *); -int local_passwd(char *); Property changes on: head/release/picobsd/tinyware/passwd/extern.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/passwd/pw_util.c =================================================================== --- head/release/picobsd/tinyware/passwd/pw_util.c (revision 354345) +++ head/release/picobsd/tinyware/passwd/pw_util.c (nonexistent) @@ -1,260 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-4-Clause - * - * Copyright (c) 1990, 1993, 1994 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static const char sccsid[] = "@(#)pw_util.c 8.3 (Berkeley) 4/2/94"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -/* - * This file is used by all the "password" programs; vipw(8), chpass(1), - * and passwd(1). - */ - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "pw_util.h" - -extern char *tempname; -static pid_t editpid = -1; -static int lockfd; -static char _default_editor[] = _PATH_VI; -static char _default_mppath[] = _PATH_PWD; -static char _default_masterpasswd[] = _PATH_MASTERPASSWD; -char *mppath = _default_mppath; -char *masterpasswd = _default_masterpasswd; - -void pw_cont(int); - -void -pw_cont(int sig) -{ - - if (editpid != -1) - kill(editpid, sig); -} - -void -pw_init(void) -{ - struct rlimit rlim; - - /* Unlimited resource limits. */ - rlim.rlim_cur = rlim.rlim_max = RLIM_INFINITY; - (void)setrlimit(RLIMIT_CPU, &rlim); - (void)setrlimit(RLIMIT_FSIZE, &rlim); - (void)setrlimit(RLIMIT_STACK, &rlim); - (void)setrlimit(RLIMIT_DATA, &rlim); - (void)setrlimit(RLIMIT_RSS, &rlim); - - /* Don't drop core (not really necessary, but GP's). */ - rlim.rlim_cur = rlim.rlim_max = 0; - (void)setrlimit(RLIMIT_CORE, &rlim); - - /* Turn off signals. */ - (void)signal(SIGALRM, SIG_IGN); - (void)signal(SIGHUP, SIG_IGN); - (void)signal(SIGINT, SIG_IGN); - (void)signal(SIGPIPE, SIG_IGN); - (void)signal(SIGQUIT, SIG_IGN); - (void)signal(SIGTERM, SIG_IGN); - (void)signal(SIGCONT, pw_cont); - - /* Create with exact permissions. */ - (void)umask(0); -} - -int -pw_lock(void) -{ - /* - * If the master password file doesn't exist, the system is hosed. - * Might as well try to build one. Set the close-on-exec bit so - * that users can't get at the encrypted passwords while editing. - * Open should allow flock'ing the file; see 4.4BSD. XXX - */ - for (;;) { - struct stat st; - - lockfd = open(masterpasswd, O_RDONLY, 0); - if (lockfd < 0 || fcntl(lockfd, F_SETFD, 1) == -1) - err(1, "%s", masterpasswd); - if (flock(lockfd, LOCK_EX|LOCK_NB)) - errx(1, "the password db file is busy"); - - /* - * If the password file was replaced while we were trying to - * get the lock, our hardlink count will be 0 and we have to - * close and retry. - */ - if (fstat(lockfd, &st) < 0) - errx(1, "fstat() failed"); - if (st.st_nlink != 0) - break; - close(lockfd); - lockfd = -1; - } - return (lockfd); -} - -int -pw_tmp(void) -{ - static char path[MAXPATHLEN]; - int fd; - char *p; - - strncpy(path, masterpasswd, MAXPATHLEN - 1); - path[MAXPATHLEN] = '\0'; - - if ((p = strrchr(path, '/'))) - ++p; - else - p = path; - strcpy(p, "pw.XXXXXX"); - if ((fd = mkstemp(path)) == -1) - err(1, "%s", path); - tempname = path; - return (fd); -} - -int -pw_mkdb(const char *username) -{ - int pstat; - pid_t pid; - - (void)fflush(stderr); - if (!(pid = fork())) { - if(!username) { - warnx("rebuilding the database..."); - execl(_PATH_PWD_MKDB, "pwd_mkdb", "-p", "-d", mppath, - tempname, (char *)NULL); - } else { - warnx("updating the database..."); - execl(_PATH_PWD_MKDB, "pwd_mkdb", "-p", "-d", mppath, - "-u", username, tempname, (char *)NULL); - } - pw_error(_PATH_PWD_MKDB, 1, 1); - } - pid = waitpid(pid, &pstat, 0); - if (pid == -1 || !WIFEXITED(pstat) || WEXITSTATUS(pstat) != 0) - return (0); - warnx("done"); - return (1); -} - -void -pw_edit(int notsetuid) -{ - int pstat; - char *p, *editor; - - if (!(editor = getenv("EDITOR"))) - editor = _default_editor; - if ((p = strrchr(editor, '/'))) - ++p; - else - p = editor; - - if (!(editpid = fork())) { - if (notsetuid) { - (void)setgid(getgid()); - (void)setuid(getuid()); - } - errno = 0; - execlp(editor, p, tempname, (char *)NULL); - _exit(errno); - } - for (;;) { - editpid = waitpid(editpid, (int *)&pstat, WUNTRACED); - errno = WEXITSTATUS(pstat); - if (editpid == -1) - pw_error(editor, 1, 1); - else if (WIFSTOPPED(pstat)) - raise(WSTOPSIG(pstat)); - else if (WIFEXITED(pstat) && errno == 0) - break; - else - pw_error(editor, 1, 1); - } - editpid = -1; -} - -void -pw_prompt(void) -{ - int c, first; - - (void)printf("re-edit the password file? [y]: "); - (void)fflush(stdout); - first = c = getchar(); - while (c != '\n' && c != EOF) - c = getchar(); - if (first == 'n') - pw_error(NULL, 0, 0); -} - -void -pw_error(const char *name, int error, int eval) -{ - if (error) { - if (name != NULL) - warn("%s", name); - else - warn(NULL); - } - warnx("password information unchanged"); - (void)unlink(tempname); - exit(eval); -} Property changes on: head/release/picobsd/tinyware/passwd/pw_util.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/passwd/pw_copy.c =================================================================== --- head/release/picobsd/tinyware/passwd/pw_copy.c (revision 354345) +++ head/release/picobsd/tinyware/passwd/pw_copy.c (nonexistent) @@ -1,306 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-4-Clause - * - * Copyright (c) 1990, 1993, 1994 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -static const char sccsid[] = "@(#)pw_copy.c 8.4 (Berkeley) 4/2/94"; -#endif /* not lint */ - -#include -__FBSDID("$FreeBSD$"); - -/* - * This module is used to copy the master password file, replacing a single - * record, by chpass(1) and passwd(1). - */ - -#include -#include -#include -#include -#include - -#if 0 -#include -#endif -extern int pw_big_ids_warning; -extern int pw_scan(char *, struct passwd *); - -#include - -extern char *tempname; - -/* for use in pw_copy(). Compare a pw entry to a pw struct. */ -static int -pw_equal(char *buf, struct passwd *pw) -{ - struct passwd buf_pw; - int len; - - len = strlen (buf); - if (buf[len-1] == '\n') - buf[len-1] = '\0'; - return (strcmp(pw->pw_name, buf_pw.pw_name) == 0 - && pw->pw_uid == buf_pw.pw_uid - && pw->pw_gid == buf_pw.pw_gid - && strcmp(pw->pw_class, buf_pw.pw_class) == 0 - && (long)pw->pw_change == (long)buf_pw.pw_change - && (long)pw->pw_expire == (long)buf_pw.pw_expire - && strcmp(pw->pw_gecos, buf_pw.pw_gecos) == 0 - && strcmp(pw->pw_dir, buf_pw.pw_dir) == 0 - && strcmp(pw->pw_shell, buf_pw.pw_shell) == 0); -} - -void -pw_copy(int ffd, int tfd, struct passwd *pw, struct passwd *old_pw) -{ - FILE *from, *to; - int done; - char *p, buf[8192]; - char uidstr[20]; - char gidstr[20]; - char chgstr[20]; - char expstr[20]; - - snprintf(uidstr, sizeof(uidstr), "%lu", (unsigned long)pw->pw_uid); - snprintf(gidstr, sizeof(gidstr), "%lu", (unsigned long)pw->pw_gid); - snprintf(chgstr, sizeof(chgstr), "%ld", (long)pw->pw_change); - snprintf(expstr, sizeof(expstr), "%ld", (long)pw->pw_expire); - - if (!(from = fdopen(ffd, "r"))) - pw_error(_PATH_MASTERPASSWD, 1, 1); - if (!(to = fdopen(tfd, "w"))) - pw_error(tempname, 1, 1); - - for (done = 0; fgets(buf, sizeof(buf), from);) { - if (!strchr(buf, '\n')) { - warnx("%s: line too long", _PATH_MASTERPASSWD); - pw_error(NULL, 0, 1); - } - if (done) { - (void)fprintf(to, "%s", buf); - if (ferror(to)) - goto err; - continue; - } - for (p = buf; *p != '\n'; p++) - if (*p != ' ' && *p != '\t') - break; - if (*p == '#' || *p == '\n') { - (void)fprintf(to, "%s", buf); - if (ferror(to)) - goto err; - continue; - } - if (!(p = strchr(buf, ':'))) { - warnx("%s: corrupted entry", _PATH_MASTERPASSWD); - pw_error(NULL, 0, 1); - } - *p = '\0'; - if (strcmp(buf, pw->pw_name)) { - *p = ':'; - (void)fprintf(to, "%s", buf); - if (ferror(to)) - goto err; - continue; - } - *p = ':'; - if (old_pw && !pw_equal(buf, old_pw)) { - warnx("%s: entry for %s has changed", - _PATH_MASTERPASSWD, pw->pw_name); - pw_error(NULL, 0, 1); - } - (void)fprintf(to, "%s:%s:%s:%s:%s:%s:%s:%s:%s:%s\n", - pw->pw_name, pw->pw_passwd, - pw->pw_fields & _PWF_UID ? uidstr : "", - pw->pw_fields & _PWF_GID ? gidstr : "", - pw->pw_class, - pw->pw_fields & _PWF_CHANGE ? chgstr : "", - pw->pw_fields & _PWF_EXPIRE ? expstr : "", - pw->pw_gecos, pw->pw_dir, pw->pw_shell); - done = 1; - if (ferror(to)) - goto err; - } - if (!done) { -#ifdef YP - /* Ultra paranoid: shouldn't happen. */ - if (getuid()) { - warnx("%s: not found in %s -- permission denied", - pw->pw_name, _PATH_MASTERPASSWD); - pw_error(NULL, 0, 1); - } else -#endif /* YP */ - (void)fprintf(to, "%s:%s:%s:%s:%s:%s:%s:%s:%s:%s\n", - pw->pw_name, pw->pw_passwd, - pw->pw_fields & _PWF_UID ? uidstr : "", - pw->pw_fields & _PWF_GID ? gidstr : "", - pw->pw_class, - pw->pw_fields & _PWF_CHANGE ? chgstr : "", - pw->pw_fields & _PWF_EXPIRE ? expstr : "", - pw->pw_gecos, pw->pw_dir, pw->pw_shell); - } - - if (ferror(to)) -err: pw_error(NULL, 1, 1); - (void)fclose(to); -} - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - - -/* - * Some software assumes that IDs are short. We should emit warnings - * for id's which can not be stored in a short, but we are more liberal - * by default, warning for IDs greater than USHRT_MAX. - * - * If pw_big_ids_warning is anything other than -1 on entry to pw_scan() - * it will be set based on the existence of PW_SCAN_BIG_IDS in the - * environment. - */ -int pw_big_ids_warning = -1; - -int -pw_scan(bp, pw) - char *bp; - struct passwd *pw; -{ - uid_t id; - int root; - char *p, *sh; - - if (pw_big_ids_warning == -1) - pw_big_ids_warning = getenv("PW_SCAN_BIG_IDS") == NULL ? 1 : 0; - - pw->pw_fields = 0; - if (!(pw->pw_name = strsep(&bp, ":"))) /* login */ - goto fmt; - root = !strcmp(pw->pw_name, "root"); - if(pw->pw_name[0] && (pw->pw_name[0] != '+' || pw->pw_name[1] == '\0')) - pw->pw_fields |= _PWF_NAME; - - if (!(pw->pw_passwd = strsep(&bp, ":"))) /* passwd */ - goto fmt; - if(pw->pw_passwd[0]) pw->pw_fields |= _PWF_PASSWD; - - if (!(p = strsep(&bp, ":"))) /* uid */ - goto fmt; - if (p[0]) - pw->pw_fields |= _PWF_UID; - else { - if (pw->pw_name[0] != '+' && pw->pw_name[0] != '-') { - warnx("no uid for user %s", pw->pw_name); - return (0); - } - } - id = strtoul(p, (char **)NULL, 10); - if (errno == ERANGE) { - warnx("%s > max uid value (%lu)", p, ULONG_MAX); - return (0); - } - if (root && id) { - warnx("root uid should be 0"); - return (0); - } - if (pw_big_ids_warning && id > USHRT_MAX) { - warnx("%s > recommended max uid value (%u)", p, USHRT_MAX); - /*return (0);*/ /* THIS SHOULD NOT BE FATAL! */ - } - pw->pw_uid = id; - - if (!(p = strsep(&bp, ":"))) /* gid */ - goto fmt; - if(p[0]) pw->pw_fields |= _PWF_GID; - id = strtoul(p, (char **)NULL, 10); - if (errno == ERANGE) { - warnx("%s > max gid value (%u)", p, ULONG_MAX); - return (0); - } - if (pw_big_ids_warning && id > USHRT_MAX) { - warnx("%s > recommended max gid value (%u)", p, USHRT_MAX); - /* return (0); This should not be fatal! */ - } - pw->pw_gid = id; - - pw->pw_class = strsep(&bp, ":"); /* class */ - if(pw->pw_class[0]) pw->pw_fields |= _PWF_CLASS; - - if (!(p = strsep(&bp, ":"))) /* change */ - goto fmt; - if(p[0]) pw->pw_fields |= _PWF_CHANGE; - pw->pw_change = atol(p); - - if (!(p = strsep(&bp, ":"))) /* expire */ - goto fmt; - if(p[0]) pw->pw_fields |= _PWF_EXPIRE; - pw->pw_expire = atol(p); - - if (!(pw->pw_gecos = strsep(&bp, ":"))) /* gecos */ - goto fmt; - if(pw->pw_gecos[0]) pw->pw_fields |= _PWF_GECOS; - - if (!(pw->pw_dir = strsep(&bp, ":"))) /* directory */ - goto fmt; - if(pw->pw_dir[0]) pw->pw_fields |= _PWF_DIR; - - if (!(pw->pw_shell = strsep(&bp, ":"))) /* shell */ - goto fmt; - - p = pw->pw_shell; - if (root && *p) /* empty == /bin/sh */ - for (setusershell();;) { - if (!(sh = getusershell())) { - warnx("warning, unknown root shell"); - break; - } - if (!strcmp(p, sh)) - break; - } - if(p[0]) pw->pw_fields |= _PWF_SHELL; - - if ((p = strsep(&bp, ":"))) { /* too many */ -fmt: warnx("corrupted entry"); - return (0); - } - return (1); -} Property changes on: head/release/picobsd/tinyware/passwd/pw_copy.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/passwd/Makefile =================================================================== --- head/release/picobsd/tinyware/passwd/Makefile (revision 354345) +++ head/release/picobsd/tinyware/passwd/Makefile (nonexistent) @@ -1,68 +0,0 @@ -# From: @(#)Makefile 8.3 (Berkeley) 4/2/94 -# $FreeBSD$ - -# Only NO_PAM is used by PicoBSD and supported here - - -PROG= passwd -SRCS= local_passwd.c passwd.c pw_copy.c pw_util.c - -GENSRCS=yp.h yp_clnt.c yppasswd.h yppasswd_clnt.c \ - yppasswd_private.h yppasswd_private_clnt.c yppasswd_private_xdr.c -CFLAGS+=-Wall - -LIBADD= crypt util -.PATH: ${.CURDIR}/../../../../usr.bin/chpass \ -# ${.CURDIR}/../../../../usr.sbin/vipw \ -# ${.CURDIR}/../../../../usr.bin/passwd - -CFLAGS+= -DLOGIN_CAP -DCRYPT -I. -I${.CURDIR} \ -# -I${.CURDIR}/../../../../usr.bin/passwd \ -# -I${.CURDIR}/../../../../usr.sbin/vipw \ -# -I${.CURDIR}/../../../../usr.bin/chpass \ -# -I${.CURDIR}/../../../../lib/libc/gen \ -# -Dyp_error=warnx -DLOGGING - -CLEANFILES= ${GENSRCS} - -RPCGEN= RPCGEN_CPP=${CPP:Q} rpcgen -C -RPCSRC= ${DESTDIR}/usr/include/rpcsvc/yp.x -RPCSRC_PW= ${DESTDIR}/usr/include/rpcsvc/yppasswd.x -RPCSRC_PRIV= ${.CURDIR}/../../usr.sbin/rpc.yppasswdd/yppasswd_private.x - -yp.h: ${RPCSRC} - ${RPCGEN} -h -o ${.TARGET} ${RPCSRC} - -yp_clnt.c: ${RPCSRC} yp.h - ${RPCGEN} -l -o ${.TARGET} ${RPCSRC} - -yppasswd.h: ${RPCSRC_PW} - ${RPCGEN} -h -o ${.TARGET} ${RPCSRC_PW} - -yppasswd_clnt.c: ${RPCSRC_PW} - ${RPCGEN} -l -o ${.TARGET} ${RPCSRC_PW} - -yppasswd_private.h: ${RPCSRC_PRIV} - ${RPCGEN} -h -o ${.TARGET} ${RPCSRC_PRIV} - -yppasswd_private_xdr.c: ${RPCSRC_PRIV} - ${RPCGEN} -c -o ${.TARGET} ${RPCSRC_PRIV} - -yppasswd_private_clnt.c: ${RPCSRC_PRIV} - ${RPCGEN} -l -o ${.TARGET} ${RPCSRC_PRIV} - -BINOWN= root -BINMODE=4555 -LINKS=${BINDIR}/passwd ${BINDIR}/yppasswd -MLINKS=passwd.1 yppasswd.1 - -beforeinstall: -.for i in passwd yppasswd - [ ! -e ${DESTDIR}${BINDIR}/$i ] || \ - chflags noschg ${DESTDIR}${BINDIR}/$i || true -.endfor - -afterinstall: - -chflags schg ${DESTDIR}${BINDIR}/passwd - -.include Property changes on: head/release/picobsd/tinyware/passwd/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/sps/README =================================================================== --- head/release/picobsd/tinyware/sps/README (revision 354345) +++ head/release/picobsd/tinyware/sps/README (nonexistent) @@ -1,11 +0,0 @@ -This is a small 'ps' replacement, which uses information available via -sysctl(3) interface (contrary to the 'aps', which requires you to mount -procfs(5) to be able to get exactly the same info, so I think that 'sps' -is superior solution). - -When I have some time, I'll add usual switches and other functions that normal -'ps' has... - - - -$FreeBSD$ Property changes on: head/release/picobsd/tinyware/sps/README ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/sps/Makefile =================================================================== --- head/release/picobsd/tinyware/sps/Makefile (revision 354345) +++ head/release/picobsd/tinyware/sps/Makefile (nonexistent) @@ -1,9 +0,0 @@ -# $FreeBSD$ -# -PROG=sps -SRCS= sps.c -MAN= - -.include - - Property changes on: head/release/picobsd/tinyware/sps/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/sps/sps.c =================================================================== --- head/release/picobsd/tinyware/sps/sps.c (revision 354345) +++ head/release/picobsd/tinyware/sps/sps.c (nonexistent) @@ -1,122 +0,0 @@ -/*- - * Copyright (c) 1998 Andrzej Bialecki - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -/* - * Small replacement for ps(1) - uses only sysctl(3) to retrieve info - */ - -#include -#include -#include -#include -#include -#include -#include - -char p_stat[] = "?iRSTZWM"; - -int -main(int argc, char *argv[]) -{ - int mib[4], i, num, len, j, plen; - char buf[MAXPATHLEN], vty[5], pst[5], wmesg[10]; - struct kinfo_proc *ki; - char *t; - int ma, mi; - - mib[0] = CTL_KERN; - mib[1] = KERN_PROC; - mib[2] = KERN_PROC_ALL; - if (sysctl(mib, 3, NULL, &len, NULL, 0) != 0) { - perror("sysctl sizing"); - exit(1); - } - t = (char *)malloc(len); - if (sysctl(mib, 3, t, &len, NULL, 0) != 0) { - perror("sysctl info"); - exit(1); - } - mib[2] = KERN_PROC_ARGS; - num = len / KINFO_PROC_SIZE; - i = 0; - printf("USERNAME PID PPID PRI NICE TTY STAT WCHAN COMMAND\n"); - while(i < num) { - ki = (struct kinfo_proc *)(t + (num - i - 1) * KINFO_PROC_SIZE); - mib[3] = ki->ki_pid; - plen = MAXPATHLEN; - if (sysctl(mib, 4, buf, &plen, NULL, 0) != 0) { - perror("sysctl cmd info"); - exit(1); - } - if (plen == 0) { - sprintf(buf, "(%s)", ki->ki_comm); - } else { - for (j = 0; j < plen - 1; j++) { - if (buf[j] == '\0') buf[j] = ' '; - } - } - if (strcmp(ki->ki_wmesg, "") == 0) { - sprintf(wmesg, "-"); - } else { - strcpy(wmesg, ki->ki_wmesg); - } - ma = major(ki->ki_tdev); - mi = minor(ki->ki_tdev); - switch(ma) { - case 255: - strcpy(vty, "??"); - break; - case 12: - if(mi != 255) { - sprintf(vty, "v%d", mi); - break; - } - /* FALLTHROUGH */ - case 0: - strcpy(vty, "con"); - break; - case 5: - sprintf(vty, "p%d", mi); - break; - } - sprintf(pst, "%c", p_stat[ki->ki_stat]); - printf("%8s %5u %5u %3d %4d %3s %-4s %-7s %s\n", - ki->ki_login, - ki->ki_pid, - ki->ki_ppid, - ki->ki_pri.pri_level, /* XXX check this */ - ki->ki_nice, - vty, - pst, - wmesg, - buf); - i++; - } - free((void *)t); - exit(0); -} Property changes on: head/release/picobsd/tinyware/sps/sps.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/msg/msg.c =================================================================== --- head/release/picobsd/tinyware/msg/msg.c (revision 354345) +++ head/release/picobsd/tinyware/msg/msg.c (nonexistent) @@ -1,75 +0,0 @@ -/*- - * Copyright (c) 1998 Andrzej Bialecki - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -/* - * Small replacement for 'dmesg'. It doesn't need libkvm nor /dev/kmem. - */ - - -#include -#include -#include -#include - -int -main(int argc, char *argv[]) -{ - int len,i; - char *buf,*p; - char *mib="kern.msgbuf"; - - /* We use sysctlbyname, because the oid is unknown (OID_AUTO) */ - - /* get the buffer size */ - i=sysctlbyname(mib,NULL,&len,NULL,0); - if(i) { - perror("buffer sizing"); - exit(-1); - } - buf=(char *)malloc(len*sizeof(char)); - i=sysctlbyname(mib,buf,&len,NULL,0); - if(i) { - perror("retrieving data"); - exit(-1); - } - p=buf; - i=0; - while(p<(buf+len)) { - switch(*p) { - case '\0': - /* skip initial NULLs */ - break; - default: - putchar(*p); - } - p++; - } - if(*--p!='\n') putchar('\n'); - free(buf); - exit(0); -} Property changes on: head/release/picobsd/tinyware/msg/msg.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/msg/README =================================================================== --- head/release/picobsd/tinyware/msg/README (revision 354345) +++ head/release/picobsd/tinyware/msg/README (nonexistent) @@ -1,15 +0,0 @@ -1998.09.14, Warsaw - -This program replaces 'dmesg' utility, aand allows you to retrieve the -system's message buffer without resorting to such dirty tricks as normal -'dmesg' uses (using libkvm and /dev/kmem to directly read kernel -memory.. *shudder*). - -This utility uses sysctl(3) interface. The mib variable it uses was -recently added to the kernel sources, so if you don't mind patching your -kernel tree, contact me directly - the patches are very small and simple. - -Andrzej Bialecki - - -$FreeBSD$ Property changes on: head/release/picobsd/tinyware/msg/README ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/msg/Makefile =================================================================== --- head/release/picobsd/tinyware/msg/Makefile (revision 354345) +++ head/release/picobsd/tinyware/msg/Makefile (nonexistent) @@ -1,9 +0,0 @@ -# $FreeBSD$ -# -PROG=msg -SRCS= msg.c -MAN= - -.include - - Property changes on: head/release/picobsd/tinyware/msg/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/msh/sh4.c =================================================================== --- head/release/picobsd/tinyware/msh/sh4.c (revision 354345) +++ head/release/picobsd/tinyware/msh/sh4.c (nonexistent) @@ -1,767 +0,0 @@ -#define Extern extern -#include -#include -#include -#include -#include -#define _NSIG NSIG -#include -#include -#include "sh.h" - -/* -------- eval.c -------- */ -/* #include "sh.h" */ -/* #include "word.h" */ - -/* - * ${} - * `command` - * blank interpretation - * quoting - * glob - */ - -_PROTOTYPE(static int expand, (char *cp, struct wdblock **wbp, int f )); -_PROTOTYPE(static char *blank, (int f )); -_PROTOTYPE(static int dollar, (int quoted )); -_PROTOTYPE(static int grave, (int quoted )); -_PROTOTYPE(void globname, (char *we, char *pp )); -_PROTOTYPE(static char *generate, (char *start1, char *end1, char *middle, char *end )); -_PROTOTYPE(static int anyspcl, (struct wdblock *wb )); -_PROTOTYPE(static int xstrcmp, (char *p1, char *p2 )); -_PROTOTYPE(void glob0, (char *a0, unsigned int a1, int a2, int (*a3)(char *, char *))); -_PROTOTYPE(void glob1, (char *base, char *lim )); -_PROTOTYPE(void glob2, (char *i, char *j )); -_PROTOTYPE(void glob3, (char *i, char *j, char *k )); -_PROTOTYPE(char *memcopy, (char *ato, char *from, int nb )); - -char ** -eval(ap, f) -register char **ap; -int f; -{ - struct wdblock *wb; - char **wp; - char **wf; - jmp_buf ev; - - wp = NULL; - wb = NULL; - wf = NULL; - if (newenv(setjmp(errpt = ev)) == 0) { - while (*ap && isassign(*ap)) - expand(*ap++, &wb, f & ~DOGLOB); - if (flag['k']) { - for (wf = ap; *wf; wf++) { - if (isassign(*wf)) - expand(*wf, &wb, f & ~DOGLOB); - } - } - for (wb = addword((char *)0, wb); *ap; ap++) { - if (!flag['k'] || !isassign(*ap)) - expand(*ap, &wb, f & ~DOKEY); - } - wb = addword((char *)0, wb); - wp = getwords(wb); - quitenv(); - } else - gflg = 1; - return(gflg? (char **)NULL: wp); -} - -/* - * Make the exported environment from the exported - * names in the dictionary. Keyword assignments - * will already have been done. - */ -char ** -makenv() - -{ - register struct wdblock *wb; - register struct var *vp; - - wb = NULL; - for (vp = vlist; vp; vp = vp->next) - if (vp->status & EXPORT) - wb = addword(vp->name, wb); - wb = addword((char *)0, wb); - return(getwords(wb)); -} - -char * -evalstr(cp, f) -register char *cp; -int f; -{ - struct wdblock *wb; - - wb = NULL; - if (expand(cp, &wb, f)) { - if (wb == NULL || wb->w_nword == 0 || (cp = wb->w_words[0]) == NULL) - cp = ""; - DELETE(wb); - } else - cp = NULL; - return(cp); -} - -static int -expand(cp, wbp, f) -register char *cp; -register struct wdblock **wbp; -int f; -{ - jmp_buf ev; - - gflg = 0; - if (cp == NULL) - return(0); - if (!anys("$`'\"", cp) && - !anys(ifs->value, cp) && - ((f&DOGLOB)==0 || !anys("[*?", cp))) { - cp = strsave(cp, areanum); - if (f & DOTRIM) - unquote(cp); - *wbp = addword(cp, *wbp); - return(1); - } - if (newenv(setjmp(errpt = ev)) == 0) { - PUSHIO(aword, cp, strchar); - e.iobase = e.iop; - while ((cp = blank(f)) && gflg == 0) { - e.linep = cp; - cp = strsave(cp, areanum); - if ((f&DOGLOB) == 0) { - if (f & DOTRIM) - unquote(cp); - *wbp = addword(cp, *wbp); - } else - *wbp = glob(cp, *wbp); - } - quitenv(); - } else - gflg = 1; - return(gflg == 0); -} - -/* - * Blank interpretation and quoting - */ -static char * -blank(f) -int f; -{ - register c, c1; - register char *sp; - int scanequals, foundequals; - - sp = e.linep; - scanequals = f & DOKEY; - foundequals = 0; - -loop: - switch (c = subgetc('"', foundequals)) { - case 0: - if (sp == e.linep) - return(0); - *e.linep++ = 0; - return(sp); - - default: - if (f & DOBLANK && any(c, ifs->value)) - goto loop; - break; - - case '"': - case '\'': - scanequals = 0; - if (INSUB()) - break; - for (c1 = c; (c = subgetc(c1, 1)) != c1;) { - if (c == 0) - break; - if (c == '\'' || !any(c, "$`\"")) - c |= QUOTE; - *e.linep++ = c; - } - c = 0; - } - unget(c); - if (!letter(c)) - scanequals = 0; - for (;;) { - c = subgetc('"', foundequals); - if (c == 0 || - f & (DOBLANK && any(c, ifs->value)) || - (!INSUB() && any(c, "\"'"))) { - scanequals = 0; - unget(c); - if (any(c, "\"'")) - goto loop; - break; - } - if (scanequals) - if (c == '=') { - foundequals = 1; - scanequals = 0; - } - else if (!letnum(c)) - scanequals = 0; - *e.linep++ = c; - } - *e.linep++ = 0; - return(sp); -} - -/* - * Get characters, substituting for ` and $ - */ -int -subgetc(ec, quoted) -register char ec; -int quoted; -{ - register char c; - -again: - c = getc(ec); - if (!INSUB() && ec != '\'') { - if (c == '`') { - if (grave(quoted) == 0) - return(0); - e.iop->task = XGRAVE; - goto again; - } - if (c == '$' && (c = dollar(quoted)) == 0) { - e.iop->task = XDOLL; - goto again; - } - } - return(c); -} - -/* - * Prepare to generate the string returned by ${} substitution. - */ -static int -dollar(quoted) -int quoted; -{ - int otask; - struct io *oiop; - char *dolp; - register char *s, c, *cp; - struct var *vp; - - c = readc(); - s = e.linep; - if (c != '{') { - *e.linep++ = c; - if (letter(c)) { - while ((c = readc())!=0 && letnum(c)) - if (e.linep < elinep) - *e.linep++ = c; - unget(c); - } - c = 0; - } else { - oiop = e.iop; - otask = e.iop->task; - e.iop->task = XOTHER; - while ((c = subgetc('"', 0))!=0 && c!='}' && c!='\n') - if (e.linep < elinep) - *e.linep++ = c; - if (oiop == e.iop) - e.iop->task = otask; - if (c != '}') { - err("unclosed ${"); - gflg++; - return(c); - } - } - if (e.linep >= elinep) { - err("string in ${} too long"); - gflg++; - e.linep -= 10; - } - *e.linep = 0; - if (*s) - for (cp = s+1; *cp; cp++) - if (any(*cp, "=-+?")) { - c = *cp; - *cp++ = 0; - break; - } - if (s[1] == 0 && (*s == '*' || *s == '@')) { - if (dolc > 1) { - /* currently this does not distinguish $* and $@ */ - /* should check dollar */ - e.linep = s; - PUSHIO(awordlist, dolv+1, dolchar); - return(0); - } else { /* trap the nasty ${=} */ - s[0] = '1'; - s[1] = 0; - } - } - vp = lookup(s); - if ((dolp = vp->value) == null) { - switch (c) { - case '=': - if (digit(*s)) { - err("cannot use ${...=...} with $n"); - gflg++; - break; - } - setval(vp, cp); - dolp = vp->value; - break; - - case '-': - dolp = strsave(cp, areanum); - break; - - case '?': - if (*cp == 0) { - prs("missing value for "); - err(s); - } else - err(cp); - gflg++; - break; - } - } else if (c == '+') - dolp = strsave(cp, areanum); - if (flag['u'] && dolp == null) { - prs("unset variable: "); - err(s); - gflg++; - } - e.linep = s; - PUSHIO(aword, dolp, quoted ? qstrchar : strchar); - return(0); -} - -/* - * Run the command in `...` and read its output. - */ -static int -grave(quoted) -int quoted; -{ - register char *cp; - register int i; - int pf[2]; - - for (cp = e.iop->argp->aword; *cp != '`'; cp++) - if (*cp == 0) { - err("no closing `"); - return(0); - } - if (openpipe(pf) < 0) - return(0); - if ((i = fork()) == -1) { - closepipe(pf); - err("try again"); - return(0); - } - if (i != 0) { - e.iop->argp->aword = ++cp; - close(pf[1]); - PUSHIO(afile, remap(pf[0]), quoted? qgravechar: gravechar); - return(1); - } - *cp = 0; - /* allow trapped signals */ - for (i=0; i<=_NSIG; i++) - if (ourtrap[i] && signal(i, SIG_IGN) != SIG_IGN) - signal(i, SIG_DFL); - dup2(pf[1], 1); - closepipe(pf); - flag['e'] = 0; - flag['v'] = 0; - flag['n'] = 0; - cp = strsave(e.iop->argp->aword, 0); - areanum = 1; - freehere(areanum); - freearea(areanum); /* free old space */ - e.oenv = NULL; - e.iop = (e.iobase = iostack) - 1; - unquote(cp); - talking = 0; - PUSHIO(aword, cp, nlchar); - onecommand(); - exit(1); -} - -char * -unquote(as) -register char *as; -{ - register char *s; - - if ((s = as) != NULL) - while (*s) - *s++ &= ~QUOTE; - return(as); -} - -/* -------- glob.c -------- */ -/* #include "sh.h" */ - -/* - * glob - */ - -#define scopy(x) strsave((x), areanum) -#define BLKSIZ 512 -#define NDENT ((BLKSIZ+sizeof(struct dirent)-1)/sizeof(struct dirent)) - -static struct wdblock *cl, *nl; -static char spcl[] = "[?*"; - -struct wdblock * -glob(cp, wb) -char *cp; -struct wdblock *wb; -{ - register i; - register char *pp; - - if (cp == 0) - return(wb); - i = 0; - for (pp = cp; *pp; pp++) - if (any(*pp, spcl)) - i++; - else if (!any(*pp & ~QUOTE, spcl)) - *pp &= ~QUOTE; - if (i != 0) { - for (cl = addword(scopy(cp), (struct wdblock *)0); anyspcl(cl); cl = nl) { - nl = newword(cl->w_nword*2); - for(i=0; iw_nword; i++) { /* for each argument */ - for (pp = cl->w_words[i]; *pp; pp++) - if (any(*pp, spcl)) { - globname(cl->w_words[i], pp); - break; - } - if (*pp == '\0') - nl = addword(scopy(cl->w_words[i]), nl); - } - for(i=0; iw_nword; i++) - DELETE(cl->w_words[i]); - DELETE(cl); - } - for(i=0; iw_nword; i++) - unquote(cl->w_words[i]); - glob0((char *)cl->w_words, cl->w_nword, sizeof(char *), xstrcmp); - if (cl->w_nword) { - for (i=0; iw_nword; i++) - wb = addword(cl->w_words[i], wb); - DELETE(cl); - return(wb); - } - } - wb = addword(unquote(cp), wb); - return(wb); -} - -void -globname(we, pp) -char *we; -register char *pp; -{ - register char *np, *cp; - char *name, *gp, *dp; - int dn, j, n, k; - DIR *dirp; - struct dirent *de; - char dname[NAME_MAX+1]; - struct stat dbuf; - - for (np = we; np != pp; pp--) - if (pp[-1] == '/') - break; - for (dp = cp = space((int)(pp-np)+3); np < pp;) - *cp++ = *np++; - *cp++ = '.'; - *cp = '\0'; - for (gp = cp = space(strlen(pp)+1); *np && *np != '/';) - *cp++ = *np++; - *cp = '\0'; - dirp = opendir(dp); - if (dirp == 0) { - DELETE(dp); - DELETE(gp); - return; - } - dname[NAME_MAX] = '\0'; - while ((de=readdir(dirp))!=NULL) { - /* XXX Hmmm... What this could be? (abial) */ - /* - if (ent[j].d_ino == 0) - continue; - */ - strncpy(dname, de->d_name, NAME_MAX); - if (dname[0] == '.') - if (*gp != '.') - continue; - for(k=0; kw_words; - for (i=0; iw_nword; i++) - if (anys(spcl, *wd++)) - return(1); - return(0); -} - -static int -xstrcmp(p1, p2) -char *p1, *p2; -{ - return(strcmp(*(char **)p1, *(char **)p2)); -} - -/* -------- word.c -------- */ -/* #include "sh.h" */ -/* #include "word.h" */ - -#define NSTART 16 /* default number of words to allow for initially */ - -struct wdblock * -newword(nw) -register int nw; -{ - register struct wdblock *wb; - - wb = (struct wdblock *) space(sizeof(*wb) + nw*sizeof(char *)); - wb->w_bsize = nw; - wb->w_nword = 0; - return(wb); -} - -struct wdblock * -addword(wd, wb) -char *wd; -register struct wdblock *wb; -{ - register struct wdblock *wb2; - register nw; - - if (wb == NULL) - wb = newword(NSTART); - if ((nw = wb->w_nword) >= wb->w_bsize) { - wb2 = newword(nw * 2); - memcopy((char *)wb2->w_words, (char *)wb->w_words, nw*sizeof(char *)); - wb2->w_nword = nw; - DELETE(wb); - wb = wb2; - } - wb->w_words[wb->w_nword++] = wd; - return(wb); -} - -char ** -getwords(wb) -register struct wdblock *wb; -{ - register char **wd; - register nb; - - if (wb == NULL) - return((char **)NULL); - if (wb->w_nword == 0) { - DELETE(wb); - return((char **)NULL); - } - wd = (char **) space(nb = sizeof(*wd) * wb->w_nword); - memcopy((char *)wd, (char *)wb->w_words, nb); - DELETE(wb); /* perhaps should done by caller */ - return(wd); -} - -_PROTOTYPE(int (*func), (char *, char *)); -int globv; - -void -glob0(a0, a1, a2, a3) -char *a0; -unsigned a1; -int a2; -_PROTOTYPE(int (*a3), (char *, char *)); -{ - func = a3; - globv = a2; - glob1(a0, a0 + a1 * a2); -} - -void -glob1(base, lim) -char *base, *lim; -{ - register char *i, *j; - int v2; - char *lptr, *hptr; - int c; - unsigned n; - - - v2 = globv; - -top: - if ((n=(int)(lim-base)) <= v2) - return; - n = v2 * (n / (2*v2)); - hptr = lptr = base+n; - i = base; - j = lim-v2; - for(;;) { - if (i < lptr) { - if ((c = (*func)(i, lptr)) == 0) { - glob2(i, lptr -= v2); - continue; - } - if (c < 0) { - i += v2; - continue; - } - } - -begin: - if (j > hptr) { - if ((c = (*func)(hptr, j)) == 0) { - glob2(hptr += v2, j); - goto begin; - } - if (c > 0) { - if (i == lptr) { - glob3(i, hptr += v2, j); - i = lptr += v2; - goto begin; - } - glob2(i, j); - j -= v2; - i += v2; - continue; - } - j -= v2; - goto begin; - } - - - if (i == lptr) { - if (lptr-base >= lim-hptr) { - glob1(hptr+v2, lim); - lim = lptr; - } else { - glob1(base, lptr); - base = hptr+v2; - } - goto top; - } - - - glob3(j, lptr -= v2, i); - j = hptr -= v2; - } -} - -void -glob2(i, j) -char *i, *j; -{ - register char *index1, *index2, c; - int m; - - m = globv; - index1 = i; - index2 = j; - do { - c = *index1; - *index1++ = *index2; - *index2++ = c; - } while(--m); -} - -void -glob3(i, j, k) -char *i, *j, *k; -{ - register char *index1, *index2, *index3; - int c; - int m; - - m = globv; - index1 = i; - index2 = j; - index3 = k; - do { - c = *index1; - *index1++ = *index3; - *index3++ = *index2; - *index2++ = c; - } while(--m); -} - -char * -memcopy(ato, from, nb) -register char *ato, *from; -register int nb; -{ - register char *to; - - to = ato; - while (--nb >= 0) - *to++ = *from++; - return(ato); -} Property changes on: head/release/picobsd/tinyware/msh/sh4.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/msh/sh5.c =================================================================== --- head/release/picobsd/tinyware/msh/sh5.c (revision 354345) +++ head/release/picobsd/tinyware/msh/sh5.c (nonexistent) @@ -1,675 +0,0 @@ -#define Extern extern -#include -#include -#define _NSIG NSIG -#include -#include -#include "sh.h" - -/* -------- io.c -------- */ -/* #include "sh.h" */ - -/* - * shell IO - */ - -static struct iobuf sharedbuf = {AFID_NOBUF}; -static struct iobuf mainbuf = {AFID_NOBUF}; -static unsigned bufid = AFID_ID; /* buffer id counter */ - -struct ioarg temparg = {0, 0, 0, AFID_NOBUF, 0}; - -_PROTOTYPE(static void readhere, (char **name, char *s, int ec )); -_PROTOTYPE(void pushio, (struct ioarg *argp, int (*fn)())); -_PROTOTYPE(static int xxchar, (struct ioarg *ap )); -_PROTOTYPE(void tempname, (char *tname )); - -int -getc(ec) -register int ec; -{ - register int c; - - if(e.linep > elinep) { - while((c=readc()) != '\n' && c) - ; - err("input line too long"); - gflg++; - return(c); - } - c = readc(); - if (ec != '\'' && e.iop->task != XGRAVE) { - if(c == '\\') { - c = readc(); - if (c == '\n' && ec != '\"') - return(getc(ec)); - c |= QUOTE; - } - } - return(c); -} - -void -unget(c) -int c; -{ - if (e.iop >= e.iobase) - e.iop->peekc = c; -} - -int -eofc() - -{ - return e.iop < e.iobase || (e.iop->peekc == 0 && e.iop->prev == 0); -} - -int -readc() -{ - register c; - - for (; e.iop >= e.iobase; e.iop--) - if ((c = e.iop->peekc) != '\0') { - e.iop->peekc = 0; - return(c); - } - else { - if (e.iop->prev != 0) { - if ((c = (*e.iop->iofn)(e.iop->argp, e.iop)) != '\0') { - if (c == -1) { - e.iop++; - continue; - } - if (e.iop == iostack) - ioecho(c); - return(e.iop->prev = c); - } - else if (e.iop->task == XIO && e.iop->prev != '\n') { - e.iop->prev = 0; - if (e.iop == iostack) - ioecho('\n'); - return '\n'; - } - } - if (e.iop->task == XIO) { - if (multiline) - return e.iop->prev = 0; - if (talking && e.iop == iostack+1) - prs(prompt->value); - } - } - if (e.iop >= iostack) - return(0); - leave(); - /* NOTREACHED */ -} - -void -ioecho(c) -char c; -{ - if (flag['v']) - write(2, &c, sizeof c); -} - -void -pushio(argp, fn) -struct ioarg *argp; -int (*fn)(); -{ - if (++e.iop >= &iostack[NPUSH]) { - e.iop--; - err("Shell input nested too deeply"); - gflg++; - return; - } - e.iop->iofn = fn; - - if (argp->afid != AFID_NOBUF) - e.iop->argp = argp; - else { - e.iop->argp = ioargstack + (e.iop - iostack); - *e.iop->argp = *argp; - e.iop->argp->afbuf = e.iop == &iostack[0] ? &mainbuf : &sharedbuf; - if (isatty(e.iop->argp->afile) == 0 && - (e.iop == &iostack[0] || - lseek(e.iop->argp->afile, 0L, 1) != -1)) { - if (++bufid == AFID_NOBUF) - bufid = AFID_ID; - e.iop->argp->afid = bufid; - } - } - - e.iop->prev = ~'\n'; - e.iop->peekc = 0; - e.iop->xchar = 0; - e.iop->nlcount = 0; - if (fn == filechar || fn == linechar) - e.iop->task = XIO; - else if (fn == gravechar || fn == qgravechar) - e.iop->task = XGRAVE; - else - e.iop->task = XOTHER; -} - -struct io * -setbase(ip) -struct io *ip; -{ - register struct io *xp; - - xp = e.iobase; - e.iobase = ip; - return(xp); -} - -/* - * Input generating functions - */ - -/* - * Produce the characters of a string, then a newline, then EOF. - */ -int -nlchar(ap) -register struct ioarg *ap; -{ - register int c; - - if (ap->aword == NULL) - return(0); - if ((c = *ap->aword++) == 0) { - ap->aword = NULL; - return('\n'); - } - return(c); -} - -/* - * Given a list of words, produce the characters - * in them, with a space after each word. - */ -int -wdchar(ap) -register struct ioarg *ap; -{ - register char c; - register char **wl; - - if ((wl = ap->awordlist) == NULL) - return(0); - if (*wl != NULL) { - if ((c = *(*wl)++) != 0) - return(c & 0177); - ap->awordlist++; - return(' '); - } - ap->awordlist = NULL; - return('\n'); -} - -/* - * Return the characters of a list of words, - * producing a space between them. - */ -int -dolchar(ap) -register struct ioarg *ap; -{ - register char *wp; - - if ((wp = *ap->awordlist++) != NULL) { - PUSHIO(aword, wp, *ap->awordlist == NULL? strchar: xxchar); - return(-1); - } - return(0); -} - -static int -xxchar(ap) -register struct ioarg *ap; -{ - register int c; - - if (ap->aword == NULL) - return(0); - if ((c = *ap->aword++) == '\0') { - ap->aword = NULL; - return(' '); - } - return(c); -} - -/* - * Produce the characters from a single word (string). - */ -int -strchar(ap) -register struct ioarg *ap; -{ - register int c; - - if (ap->aword == NULL || (c = *ap->aword++) == 0) - return(0); - return(c); -} - -/* - * Produce quoted characters from a single word (string). - */ -int -qstrchar(ap) -register struct ioarg *ap; -{ - register int c; - - if (ap->aword == NULL || (c = *ap->aword++) == 0) - return(0); - return(c|QUOTE); -} - -/* - * Return the characters from a file. - */ -int -filechar(ap) -register struct ioarg *ap; -{ - register int i; - char c; - struct iobuf *bp = ap->afbuf; - - if (ap->afid != AFID_NOBUF) { - if ((i = ap->afid != bp->id) || bp->bufp == bp->ebufp) { - if (i) - lseek(ap->afile, ap->afpos, 0); - do { - i = read(ap->afile, bp->buf, sizeof(bp->buf)); - } while (i < 0 && errno == EINTR); - if (i <= 0) { - closef(ap->afile); - return 0; - } - bp->id = ap->afid; - bp->ebufp = (bp->bufp = bp->buf) + i; - } - ap->afpos++; - return *bp->bufp++ & 0177; - } - - do { - i = read(ap->afile, &c, sizeof(c)); - } while (i < 0 && errno == EINTR); - return(i == sizeof(c)? c&0177: (closef(ap->afile), 0)); -} - -/* - * Return the characters from a here temp file. - */ -int -herechar(ap) -register struct ioarg *ap; -{ - char c; - - - if (read(ap->afile, &c, sizeof(c)) != sizeof(c)) { - close(ap->afile); - c = 0; - } - return (c); - -} - -/* - * Return the characters produced by a process (`...`). - * Quote them if required, and remove any trailing newline characters. - */ -int -gravechar(ap, iop) -struct ioarg *ap; -struct io *iop; -{ - register int c; - - if ((c = qgravechar(ap, iop)&~QUOTE) == '\n') - c = ' '; - return(c); -} - -int -qgravechar(ap, iop) -register struct ioarg *ap; -struct io *iop; -{ - register int c; - - if (iop->xchar) { - if (iop->nlcount) { - iop->nlcount--; - return('\n'|QUOTE); - } - c = iop->xchar; - iop->xchar = 0; - } else if ((c = filechar(ap)) == '\n') { - iop->nlcount = 1; - while ((c = filechar(ap)) == '\n') - iop->nlcount++; - iop->xchar = c; - if (c == 0) - return(c); - iop->nlcount--; - c = '\n'; - } - return(c!=0? c|QUOTE: 0); -} - -/* - * Return a single command (usually the first line) from a file. - */ -int -linechar(ap) -register struct ioarg *ap; -{ - register int c; - - if ((c = filechar(ap)) == '\n') { - if (!multiline) { - closef(ap->afile); - ap->afile = -1; /* illegal value */ - } - } - return(c); -} - -void -prs(s) -register char *s; -{ - if (*s) - write(2, s, strlen(s)); -} - -void -putc(c) -char c; -{ - write(2, &c, sizeof c); -} - -void -prn(u) -unsigned u; -{ - prs(itoa(u, 0)); -} - -void -closef(i) -register int i; -{ - if (i > 2) - close(i); -} - -void -closeall() -{ - register u; - - for (u=NUFILE; u= 0 && fd < e.iofd); - for (i=0; ih_tag = evalstr(s, DOSUB); - if (h->h_tag == 0) - return; - h->h_iop = iop; - iop->io_name = 0; - h->h_next = NULL; - if (inhere == 0) - inhere = h; - else - for (lh = inhere; lh!=NULL; lh = lh->h_next) - if (lh->h_next == 0) { - lh->h_next = h; - break; - } - iop->io_flag |= IOHERE|IOXHERE; - for (s = h->h_tag; *s; s++) - if (*s & QUOTE) { - iop->io_flag &= ~ IOXHERE; - *s &= ~ QUOTE; - } - h->h_dosub = iop->io_flag & IOXHERE; -} - -void -gethere() -{ - register struct here *h, *hp; - - /* Scan here files first leaving inhere list in place */ - for (hp = h = inhere; h != NULL; hp = h, h = h->h_next) - readhere(&h->h_iop->io_name, h->h_tag, h->h_dosub? 0: '\''); - - /* Make inhere list active - keep list intact for scraphere */ - if (hp != NULL) { - hp->h_next = acthere; - acthere = inhere; - inhere = NULL; - } -} - -static void -readhere(name, s, ec) -char **name; -register char *s; -int ec; -{ - int tf; - char tname[30]; - register c; - jmp_buf ev; - char line [LINELIM+1]; - char *next; - - tempname(tname); - *name = strsave(tname, areanum); - tf = creat(tname, 0600); - if (tf < 0) - return; - if (newenv(setjmp(errpt = ev)) != 0) - unlink(tname); - else { - pushio(e.iop->argp, e.iop->iofn); - e.iobase = e.iop; - for (;;) { - if (talking && e.iop <= iostack) - prs(cprompt->value); - next = line; - while ((c = getc(ec)) != '\n' && c) { - if (ec == '\'') - c &= ~ QUOTE; - if (next >= &line[LINELIM]) { - c = 0; - break; - } - *next++ = c; - } - *next = 0; - if (strcmp(s, line) == 0 || c == 0) - break; - *next++ = '\n'; - write (tf, line, (int)(next-line)); - } - if (c == 0) { - prs("here document `"); prs(s); err("' unclosed"); - } - quitenv(); - } - close(tf); -} - -/* - * open here temp file. - * if unquoted here, expand here temp file into second temp file. - */ -int -herein(hname, xdoll) -char *hname; -int xdoll; -{ - register hf, tf; - - if (hname == 0) - return(-1); - hf = open(hname, 0); - if (hf < 0) - return (-1); - if (xdoll) { - char c; - char tname[30]; - jmp_buf ev; - - tempname(tname); - if ((tf = creat(tname, 0600)) < 0) - return (-1); - if (newenv(setjmp(errpt = ev)) == 0) { - PUSHIO(afile, hf, herechar); - setbase(e.iop); - while ((c = subgetc(0, 0)) != 0) { - c &= ~ QUOTE; - write(tf, &c, sizeof c); - } - quitenv(); - } else - unlink(tname); - close(tf); - tf = open(tname, 0); - unlink(tname); - return (tf); - } else - return (hf); -} - -void -scraphere() -{ - register struct here *h; - - for (h = inhere; h != NULL; h = h->h_next) { - if (h->h_iop && h->h_iop->io_name) - unlink(h->h_iop->io_name); - } - inhere = NULL; -} - -/* unlink here temp files before a freearea(area) */ -void -freehere(area) -int area; -{ - register struct here *h, *hl; - - hl = NULL; - for (h = acthere; h != NULL; h = h->h_next) - if (getarea((char *) h) >= area) { - if (h->h_iop->io_name != NULL) - unlink(h->h_iop->io_name); - if (hl == NULL) - acthere = h->h_next; - else - hl->h_next = h->h_next; - } else - hl = h; -} - -void -tempname(tname) -char *tname; -{ - static int inc; - register char *cp, *lp; - - for (cp = tname, lp = "/tmp/shtm"; (*cp = *lp++) != '\0'; cp++) - ; - lp = putn(getpid()*1000 + inc++); - for (; (*cp = *lp++) != '\0'; cp++) - ; -} Property changes on: head/release/picobsd/tinyware/msh/sh5.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/msh/sh6.c =================================================================== --- head/release/picobsd/tinyware/msh/sh6.c (revision 354345) +++ head/release/picobsd/tinyware/msh/sh6.c (nonexistent) @@ -1,9 +0,0 @@ -#define Extern - -#include -#include -#define _NSIG NSIG -#include -#include -#include "sh.h" - Property changes on: head/release/picobsd/tinyware/msh/sh6.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/msh/msh.1 =================================================================== --- head/release/picobsd/tinyware/msh/msh.1 (revision 354345) +++ head/release/picobsd/tinyware/msh/msh.1 (nonexistent) @@ -1,260 +0,0 @@ -.TH SH 1 -.SH NAME -sh, ., break, case, cd, continue, eval, exec, exit, export, for, if, read, readonly, set, shift, trap, umask, wait, while \- shell -.SH SYNOPSIS -\fBsh\fR [\fB\-eiknqstvxu\fR] [\fB\-c \fIstr\fR] \fB[\fIfile\fR]\fR -.br -.de FL -.TP -\\fB\\$1\\fR -\\$2 -.. -.de EX -.TP 20 -\\fB\\$1\\fR -# \\$2 -.. -.SH OPTIONS -.FL "\-c" "Execute the commands in \fIstr\fR" -.FL "\-e" "Quit on error" -.FL "\-i" "Interactive mode; ignore QUIT, TERMINATE, INTERRUPT" -.FL "\-k" "Look for name=value everywhere on command line" -.FL "\-n" "Do not execute commands" -.FL "\-q" "Change qflag from sig_ign to sig_del" -.FL "\-s" "Read commands from standard input" -.FL "\-t" "Exit after reading and executing one command" -.FL "\-v" "Echo input lines as they are read" -.FL "\-x" "Trace" -.FL "\-u" "Unset variables" -.SH EXAMPLES -.EX "sh script" "Run a shell script" -.SH DESCRIPTION -.I Sh -is the shell, which forms the user's main interface with the system. -On startup, the shell reads /etc/profile and $HOME/.profile, if they exist, -and executes any commands they contain. The Minix shell has most of the -features of the V7 (Bourne) shell, including redirection of input and output, -pipes, magic characters, background processes, and shell scripts. A brief -summary follows, but whole books have been written on shell programming alone. -.LP -Some of the more common notations are: -.PP -.in +2.45i -.ta 2i 2.2i -.ti -2.2i -date # Regular command -.ti -2.2i -sort file2 # Redirect \fIstdin\fR and \fIstdout\fR -.ti -2.2i -cc file.c 2>error # Redirect \fIstderr\fR -.ti -2.2i -a.out >f 2>&1 # Combine standard output and standard error -.ti -2.2i -sort >file2 # Append output to \fIfile2\fR -.ti -2.2i -sort file2 & # Background job -.ti -2.2i -(ls \-l; a.out) & # Run two background commands sequentially -.ti -2.2i -sort with no command name, modify shell I/O -.ti -2i -exit [n] exit a shell program, with exit value n -.ti -2i -export [var] export var to shell's children; list exported variables -.ti -2i -pwd print the name of the current working directory -.ti -2i -read var read a line from stdin and assign to var -.ti -2i -readonly [var] make var readonly; list readonly variables -.ti -2i -set -f set shell flag (+f unsets flag) -.ti -2i -set str set positional parameter to str -.ti -2i -set show the current shell variables -.ti -2i -shift reassign positional parameters (except ${0}) one left -.ti -2i -times print accumulated user and system times for processes -.ti -2i -trap arg sigs trap signals sigs and run arg on receipt -.ti -2i -trap list trapped signals -.ti -2i -umask [n] set the user file creation mask; show the current umask -.ti -2i -wait [n] wait for process pid n; wait for all processes -.in -2.25i -.LP -The shell also contains a programming language, which has the following -operators and flow control statements: -.PP -.in +3.50i -.ta 2i 3.25i -.ti -3.25i -# Comment The rest of the line is ignored -.ti -3.25i -= Assignment Set a shell variable -.ti -3.25i -&& Logical AND Execute second command only if first succeeds -.ti -3.25i -|| Logical OR Execute second command only if first fails -.ti -3.25i -(...) Group Execute enclosed commands before continuing -.in -3.50i -.PP -.in +2.25i -.ta 2i -.ti -2i -for For loop (for ... in ... do ... done) -.ti -2i -case Case statement ((case ... ) ... ;; ... esac) -.ti -2i -esac Case statement end -.ti -2i -while While loop (while ... do ... done) -.ti -2i -do Do/For/While loop start (do ... until ...) -.ti -2i -done For/While loop end -.ti -2i -if Conditional statement (if ... else ... elif ... fi) -.ti -2i -in For loop selection -.ti -2i -then Conditional statement start -.ti -2i -else Conditional statement alternative -.ti -2i -elif Conditional statement end -.ti -2i -until Do loop end -.ti -2i -fi Conditional statement end -.in -2.25i -.SH "SEE ALSO" -.BR echo (1), -.BR expr (1), -.BR pwd (1), -.BR true (1). Property changes on: head/release/picobsd/tinyware/msh/msh.1 ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/msh/README =================================================================== --- head/release/picobsd/tinyware/msh/README (revision 354345) +++ head/release/picobsd/tinyware/msh/README (nonexistent) @@ -1,13 +0,0 @@ -This is a port of Minix /bin/sh shell. - -It's quite limited, but also quite small. One of most serious -limitations is lack of support for user-defined functions. Also, -globbing should be implemented with our glob(3) - the version in -sh4.c is rather primitive. - -This version is under BSD license. - -Andrzej Bialecki - - -$Id$ Property changes on: head/release/picobsd/tinyware/msh/README ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/msh/sh.h =================================================================== --- head/release/picobsd/tinyware/msh/sh.h (revision 354345) +++ head/release/picobsd/tinyware/msh/sh.h (nonexistent) @@ -1,388 +0,0 @@ -#include -#include -#include -#include - -/* Need a way to have void used for ANSI, nothing for K&R. */ -#ifndef _ANSI -#undef _VOID -#define _VOID -#endif - -/* -------- sh.h -------- */ -/* - * shell - */ - -#define LINELIM 2100 -#define NPUSH 8 /* limit to input nesting */ - -#define NOFILE 20 /* Number of open files */ -#define NUFILE 10 /* Number of user-accessible files */ -#define FDBASE 10 /* First file usable by Shell */ - -/* - * values returned by wait - */ -#define WAITSIG(s) ((s)&0177) -#define WAITVAL(s) (((s)>>8)&0377) -#define WAITCORE(s) (((s)&0200)!=0) - -/* - * library and system defintions - */ -#ifdef __STDC__ -typedef void xint; /* base type of jmp_buf, for not broken compilers */ -#else -typedef char * xint; /* base type of jmp_buf, for broken compilers */ -#endif - -/* - * shell components - */ -/* #include "area.h" */ -/* #include "word.h" */ -/* #include "io.h" */ -/* #include "var.h" */ - -#define QUOTE 0200 - -#define NOBLOCK ((struct op *)NULL) -#define NOWORD ((char *)NULL) -#define NOWORDS ((char **)NULL) -#define NOPIPE ((int *)NULL) - -/* - * Description of a command or an operation on commands. - * Might eventually use a union. - */ -struct op { - int type; /* operation type, see below */ - char **words; /* arguments to a command */ - struct ioword **ioact; /* IO actions (eg, < > >>) */ - struct op *left; - struct op *right; - char *str; /* identifier for case and for */ -}; - -#define TCOM 1 /* command */ -#define TPAREN 2 /* (c-list) */ -#define TPIPE 3 /* a | b */ -#define TLIST 4 /* a [&;] b */ -#define TOR 5 /* || */ -#define TAND 6 /* && */ -#define TFOR 7 -#define TDO 8 -#define TCASE 9 -#define TIF 10 -#define TWHILE 11 -#define TUNTIL 12 -#define TELIF 13 -#define TPAT 14 /* pattern in case */ -#define TBRACE 15 /* {c-list} */ -#define TASYNC 16 /* c & */ - -/* - * actions determining the environment of a process - */ -#define BIT(i) (1<<(i)) -#define FEXEC BIT(0) /* execute without forking */ - -/* - * flags to control evaluation of words - */ -#define DOSUB 1 /* interpret $, `, and quotes */ -#define DOBLANK 2 /* perform blank interpretation */ -#define DOGLOB 4 /* interpret [?* */ -#define DOKEY 8 /* move words with `=' to 2nd arg. list */ -#define DOTRIM 16 /* trim resulting string */ - -#define DOALL (DOSUB|DOBLANK|DOGLOB|DOKEY|DOTRIM) - -Extern char **dolv; -Extern int dolc; -Extern int exstat; -Extern char gflg; -Extern int talking; /* interactive (talking-type wireless) */ -Extern int execflg; -Extern int multiline; /* \n changed to ; */ -Extern struct op *outtree; /* result from parser */ - -Extern xint *failpt; -Extern xint *errpt; - -struct brkcon { - jmp_buf brkpt; - struct brkcon *nextlev; -} ; -Extern struct brkcon *brklist; -Extern int isbreak; - -/* - * redirection - */ -struct ioword { - short io_unit; /* unit affected */ - short io_flag; /* action (below) */ - char *io_name; /* file name */ -}; -#define IOREAD 1 /* < */ -#define IOHERE 2 /* << (here file) */ -#define IOWRITE 4 /* > */ -#define IOCAT 8 /* >> */ -#define IOXHERE 16 /* ${}, ` in << */ -#define IODUP 32 /* >&digit */ -#define IOCLOSE 64 /* >&- */ - -#define IODEFAULT (-1) /* token for default IO unit */ - -Extern struct wdblock *wdlist; -Extern struct wdblock *iolist; - -/* - * parsing & execution environment - */ -extern struct env { - char *linep; - struct io *iobase; - struct io *iop; - xint *errpt; - int iofd; - struct env *oenv; -} e; - -/* - * flags: - * -e: quit on error - * -k: look for name=value everywhere on command line - * -n: no execution - * -t: exit after reading and executing one command - * -v: echo as read - * -x: trace - * -u: unset variables net diagnostic - */ -extern char *flag; - -extern char *null; /* null value for variable */ -extern int intr; /* interrupt pending */ - -Extern char *trap[_NSIG+1]; -Extern char ourtrap[_NSIG+1]; -Extern int trapset; /* trap pending */ - -extern int heedint; /* heed interrupt signals */ - -Extern int yynerrs; /* yacc */ - -Extern char line[LINELIM]; -extern char *elinep; - -/* - * other functions - */ -#ifdef __STDC__ -int (*inbuilt(char *s ))(void); -#else -int (*inbuilt())(); -#endif - -#ifdef __FreeBSD__ -#define _PROTOTYPE(x,y) x ## y -#endif - -_PROTOTYPE(char *rexecve , (char *c , char **v , char **envp )); -_PROTOTYPE(char *space , (int n )); -_PROTOTYPE(char *strsave , (char *s , int a )); -_PROTOTYPE(char *evalstr , (char *cp , int f )); -_PROTOTYPE(char *putn , (int n )); -_PROTOTYPE(char *itoa , (unsigned u , int n )); -_PROTOTYPE(char *unquote , (char *as )); -_PROTOTYPE(struct var *lookup , (char *n )); -_PROTOTYPE(int rlookup , (char *n )); -_PROTOTYPE(struct wdblock *glob , (char *cp , struct wdblock *wb )); -_PROTOTYPE(int subgetc , (int ec , int quoted )); -_PROTOTYPE(char **makenv , (void)); -_PROTOTYPE(char **eval , (char **ap , int f )); -_PROTOTYPE(int setstatus , (int s )); -_PROTOTYPE(int waitfor , (int lastpid , int canintr )); - -_PROTOTYPE(void onintr , (int s )); /* SIGINT handler */ - -_PROTOTYPE(int newenv , (int f )); -_PROTOTYPE(void quitenv , (void)); -_PROTOTYPE(void err , (char *s )); -_PROTOTYPE(int anys , (char *s1 , char *s2 )); -_PROTOTYPE(int any , (int c , char *s )); -_PROTOTYPE(void next , (int f )); -_PROTOTYPE(void setdash , (void)); -_PROTOTYPE(void onecommand , (void)); -_PROTOTYPE(void runtrap , (int i )); -_PROTOTYPE(void xfree , (char *s )); -_PROTOTYPE(int letter , (int c )); -_PROTOTYPE(int digit , (int c )); -_PROTOTYPE(int letnum , (int c )); -_PROTOTYPE(int gmatch , (char *s , char *p )); - -/* - * error handling - */ -_PROTOTYPE(void leave , (void)); /* abort shell (or fail in subshell) */ -_PROTOTYPE(void fail , (void)); /* fail but return to process next command */ -_PROTOTYPE(void warn , (char *s )); -_PROTOTYPE(void sig , (int i )); /* default signal handler */ - -/* -------- var.h -------- */ - -struct var { - char *value; - char *name; - struct var *next; - char status; -}; -#define COPYV 1 /* flag to setval, suggesting copy */ -#define RONLY 01 /* variable is read-only */ -#define EXPORT 02 /* variable is to be exported */ -#define GETCELL 04 /* name & value space was got with getcell */ - -Extern struct var *vlist; /* dictionary */ - -Extern struct var *homedir; /* home directory */ -Extern struct var *prompt; /* main prompt */ -Extern struct var *cprompt; /* continuation prompt */ -Extern struct var *path; /* search path for commands */ -Extern struct var *shell; /* shell to interpret command files */ -Extern struct var *ifs; /* field separators */ - -_PROTOTYPE(int yyparse , (void)); -_PROTOTYPE(struct var *lookup , (char *n )); -_PROTOTYPE(void setval , (struct var *vp , char *val )); -_PROTOTYPE(void nameval , (struct var *vp , char *val , char *name )); -_PROTOTYPE(void export , (struct var *vp )); -_PROTOTYPE(void ronly , (struct var *vp )); -_PROTOTYPE(int isassign , (char *s )); -_PROTOTYPE(int checkname , (char *cp )); -_PROTOTYPE(int assign , (char *s , int cf )); -_PROTOTYPE(void putvlist , (int f , int out )); -_PROTOTYPE(int eqname , (char *n1 , char *n2 )); - -_PROTOTYPE(int execute , (struct op *t , int *pin , int *pout , int act )); - -/* -------- io.h -------- */ -/* io buffer */ -struct iobuf { - unsigned id; /* buffer id */ - char buf[512]; /* buffer */ - char *bufp; /* pointer into buffer */ - char *ebufp; /* pointer to end of buffer */ -}; - -/* possible arguments to an IO function */ -struct ioarg { - char *aword; - char **awordlist; - int afile; /* file descriptor */ - unsigned afid; /* buffer id */ - long afpos; /* file position */ - struct iobuf *afbuf; /* buffer for this file */ -}; -Extern struct ioarg ioargstack[NPUSH]; -#define AFID_NOBUF (~0) -#define AFID_ID 0 - -/* an input generator's state */ -struct io { - int (*iofn)(_VOID); - struct ioarg *argp; - int peekc; - char prev; /* previous character read by readc() */ - char nlcount; /* for `'s */ - char xchar; /* for `'s */ - char task; /* reason for pushed IO */ -}; -Extern struct io iostack[NPUSH]; -#define XOTHER 0 /* none of the below */ -#define XDOLL 1 /* expanding ${} */ -#define XGRAVE 2 /* expanding `'s */ -#define XIO 3 /* file IO */ - -/* in substitution */ -#define INSUB() (e.iop->task == XGRAVE || e.iop->task == XDOLL) - -/* - * input generators for IO structure - */ -_PROTOTYPE(int nlchar , (struct ioarg *ap )); -_PROTOTYPE(int strchar , (struct ioarg *ap )); -_PROTOTYPE(int qstrchar , (struct ioarg *ap )); -_PROTOTYPE(int filechar , (struct ioarg *ap )); -_PROTOTYPE(int herechar , (struct ioarg *ap )); -_PROTOTYPE(int linechar , (struct ioarg *ap )); -_PROTOTYPE(int gravechar , (struct ioarg *ap , struct io *iop )); -_PROTOTYPE(int qgravechar , (struct ioarg *ap , struct io *iop )); -_PROTOTYPE(int dolchar , (struct ioarg *ap )); -_PROTOTYPE(int wdchar , (struct ioarg *ap )); -_PROTOTYPE(void scraphere , (void)); -_PROTOTYPE(void freehere , (int area )); -_PROTOTYPE(void gethere , (void)); -_PROTOTYPE(void markhere , (char *s , struct ioword *iop )); -_PROTOTYPE(int herein , (char *hname , int xdoll )); -_PROTOTYPE(int run , (struct ioarg *argp , int (*f)(_VOID))); - -/* - * IO functions - */ -_PROTOTYPE(int eofc , (void)); -_PROTOTYPE(int getc , (int ec )); -_PROTOTYPE(int readc , (void)); -_PROTOTYPE(void unget , (int c )); -_PROTOTYPE(void ioecho , (int c )); -_PROTOTYPE(void prs , (char *s )); -_PROTOTYPE(void putc , (int c )); -_PROTOTYPE(void prn , (unsigned u )); -_PROTOTYPE(void closef , (int i )); -_PROTOTYPE(void closeall , (void)); - -/* - * IO control - */ -_PROTOTYPE(void pushio , (struct ioarg *argp , int (*fn)(_VOID))); -_PROTOTYPE(int remap , (int fd )); -_PROTOTYPE(int openpipe , (int *pv )); -_PROTOTYPE(void closepipe , (int *pv )); -_PROTOTYPE(struct io *setbase , (struct io *ip )); - -extern struct ioarg temparg; /* temporary for PUSHIO */ -#define PUSHIO(what,arg,gen) ((temparg.what = (arg)),pushio(&temparg,(gen))) -#define RUN(what,arg,gen) ((temparg.what = (arg)), run(&temparg,(gen))) - -/* -------- word.h -------- */ -#ifndef WORD_H -#define WORD_H 1 -struct wdblock { - short w_bsize; - short w_nword; - /* bounds are arbitrary */ - char *w_words[1]; -}; - -_PROTOTYPE(struct wdblock *addword , (char *wd , struct wdblock *wb )); -_PROTOTYPE(struct wdblock *newword , (int nw )); -_PROTOTYPE(char **getwords , (struct wdblock *wb )); -#endif - -/* -------- area.h -------- */ - -/* - * storage allocation - */ -_PROTOTYPE(char *getcell , (unsigned nbytes )); -_PROTOTYPE(void garbage , (void)); -_PROTOTYPE(void setarea , (char *cp , int a )); -_PROTOTYPE(int getarea , (char *cp )); -_PROTOTYPE(void freearea , (int a )); -_PROTOTYPE(void freecell , (char *cp )); - -Extern int areanum; /* current allocation area */ - -#define NEW(type) (type *)getcell(sizeof(type)) -#define DELETE(obj) freecell((char *)obj) Property changes on: head/release/picobsd/tinyware/msh/sh.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/msh/Makefile =================================================================== --- head/release/picobsd/tinyware/msh/Makefile (revision 354345) +++ head/release/picobsd/tinyware/msh/Makefile (nonexistent) @@ -1,8 +0,0 @@ -# $FreeBSD$ -# -PROG=msh -SRCS= sh1.c sh2.c sh3.c sh4.c sh5.c sh6.c - -.include - - Property changes on: head/release/picobsd/tinyware/msh/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/msh/sh1.c =================================================================== --- head/release/picobsd/tinyware/msh/sh1.c (revision 354345) +++ head/release/picobsd/tinyware/msh/sh1.c (nonexistent) @@ -1,953 +0,0 @@ -#define Extern extern -#include -#include -#define _NSIG NSIG -#include -#include -#include "sh.h" -/* -------- sh.c -------- */ -/* - * shell - */ - -/* #include "sh.h" */ - -int intr; -int inparse; -char flags['z'-'a'+1]; -char *flag = flags-'a'; -char *elinep = line+sizeof(line)-5; -char *null = ""; -int heedint =1; -struct env e ={line, iostack, iostack-1, - (xint *)NULL, FDBASE, (struct env *)NULL}; - -extern char **environ; /* environment pointer */ - -/* - * default shell, search rules - */ -char shellname[] = "/bin/sh"; -char search[] = ":/bin:/usr/bin"; - -_PROTOTYPE(void (*qflag), (int)) = SIG_IGN; - -_PROTOTYPE(int main, (int argc, char **argv )); -_PROTOTYPE(int newfile, (char *s )); -_PROTOTYPE(static char *findeq, (char *cp )); -_PROTOTYPE(static char *cclass, (char *p, int sub )); -_PROTOTYPE(void initarea, (void)); - -int main(argc, argv) -int argc; -register char **argv; -{ - register int f; - register char *s; - int cflag; - char *name, **ap; - int (*iof)(); - - initarea(); - if ((ap = environ) != NULL) { - while (*ap) - assign(*ap++, !COPYV); - for (ap = environ; *ap;) - export(lookup(*ap++)); - } - closeall(); - areanum = 1; - - shell = lookup("SHELL"); - if (shell->value == null) - setval(shell, shellname); - export(shell); - - homedir = lookup("HOME"); - if (homedir->value == null) - setval(homedir, "/"); - export(homedir); - - setval(lookup("$"), itoa(getpid(), 5)); - - path = lookup("PATH"); - if (path->value == null) - setval(path, search); - export(path); - - ifs = lookup("IFS"); - if (ifs->value == null) - setval(ifs, " \t\n"); - - prompt = lookup("PS1"); - if (prompt->value == null) -#ifndef UNIXSHELL - setval(prompt, "$ "); -#else - setval(prompt, "% "); -#endif - - if (geteuid() == 0) { - setval(prompt, "# "); - prompt->status &= ~EXPORT; - } - cprompt = lookup("PS2"); - if (cprompt->value == null) - setval(cprompt, "> "); - - iof = filechar; - cflag = 0; - name = *argv++; - if (--argc >= 1) { - if(argv[0][0] == '-' && argv[0][1] != '\0') { - for (s = argv[0]+1; *s; s++) - switch (*s) { - case 'c': - prompt->status &= ~EXPORT; - cprompt->status &= ~EXPORT; - setval(prompt, ""); - setval(cprompt, ""); - cflag = 1; - if (--argc > 0) - PUSHIO(aword, *++argv, iof = nlchar); - break; - - case 'q': - qflag = SIG_DFL; - break; - - case 's': - /* standard input */ - break; - - case 't': - prompt->status &= ~EXPORT; - setval(prompt, ""); - iof = linechar; - break; - - case 'i': - talking++; - default: - if (*s>='a' && *s<='z') - flag[*s]++; - } - } else { - argv--; - argc++; - } - if (iof == filechar && --argc > 0) { - setval(prompt, ""); - setval(cprompt, ""); - prompt->status &= ~EXPORT; - cprompt->status &= ~EXPORT; - if (newfile(name = *++argv)) - exit(1); - } - } - setdash(); - if (e.iop < iostack) { - PUSHIO(afile, 0, iof); - if (isatty(0) && isatty(1) && !cflag) - talking++; - } - signal(SIGQUIT, qflag); - if (name && name[0] == '-') { - talking++; - if ((f = open(".profile", 0)) >= 0) - next(remap(f)); - if ((f = open("/etc/profile", 0)) >= 0) - next(remap(f)); - } - if (talking) - signal(SIGTERM, sig); - if (signal(SIGINT, SIG_IGN) != SIG_IGN) - signal(SIGINT, onintr); - dolv = argv; - dolc = argc; - dolv[0] = name; - if (dolc > 1) - for (ap = ++argv; --argc > 0;) - if (assign(*ap = *argv++, !COPYV)) - dolc--; /* keyword */ - else - ap++; - setval(lookup("#"), putn((--dolc < 0) ? (dolc = 0) : dolc)); - - for (;;) { - if (talking && e.iop <= iostack) - prs(prompt->value); - onecommand(); - } -} - -void -setdash() -{ - register char *cp, c; - char m['z'-'a'+1]; - - cp = m; - for (c='a'; c<='z'; c++) - if (flag[c]) - *cp++ = c; - *cp = 0; - setval(lookup("-"), m); -} - -int -newfile(s) -register char *s; -{ - register f; - - if (strcmp(s, "-") != 0) { - f = open(s, 0); - if (f < 0) { - prs(s); - err(": cannot open"); - return(1); - } - } else - f = 0; - next(remap(f)); - return(0); -} - -void -onecommand() -{ - register i; - jmp_buf m1; - - while (e.oenv) - quitenv(); - areanum = 1; - freehere(areanum); - freearea(areanum); - garbage(); - wdlist = 0; - iolist = 0; - e.errpt = 0; - e.linep = line; - yynerrs = 0; - multiline = 0; - inparse = 1; - intr = 0; - execflg = 0; - setjmp(failpt = m1); /* Bruce Evans' fix */ - if (setjmp(failpt = m1) || yyparse() || intr) { - while (e.oenv) - quitenv(); - scraphere(); - if (!talking && intr) - leave(); - inparse = 0; - intr = 0; - return; - } - inparse = 0; - brklist = 0; - intr = 0; - execflg = 0; - if (!flag['n']) - execute(outtree, NOPIPE, NOPIPE, 0); - if (!talking && intr) { - execflg = 0; - leave(); - } - if ((i = trapset) != 0) { - trapset = 0; - runtrap(i); - } -} - -void -fail() -{ - longjmp(failpt, 1); - /* NOTREACHED */ -} - -void -leave() -{ - if (execflg) - fail(); - scraphere(); - freehere(1); - runtrap(0); - exit(exstat); - /* NOTREACHED */ -} - -void -warn(s) -register char *s; -{ - if(*s) { - prs(s); - exstat = -1; - } - prs("\n"); - if (flag['e']) - leave(); -} - -void -err(s) -char *s; -{ - warn(s); - if (flag['n']) - return; - if (!talking) - leave(); - if (e.errpt) - longjmp(e.errpt, 1); - closeall(); - e.iop = e.iobase = iostack; -} - -int -newenv(f) -int f; -{ - register struct env *ep; - - if (f) { - quitenv(); - return(1); - } - ep = (struct env *) space(sizeof(*ep)); - if (ep == NULL) { - while (e.oenv) - quitenv(); - fail(); - } - *ep = e; - e.oenv = ep; - e.errpt = errpt; - return(0); -} - -void -quitenv() -{ - register struct env *ep; - register fd; - - if ((ep = e.oenv) != NULL) { - fd = e.iofd; - e = *ep; - /* should close `'d files */ - DELETE(ep); - while (--fd >= e.iofd) - close(fd); - } -} - -/* - * Is any character from s1 in s2? - */ -int -anys(s1, s2) -register char *s1, *s2; -{ - while (*s1) - if (any(*s1++, s2)) - return(1); - return(0); -} - -/* - * Is character c in s? - */ -int -any(c, s) -register int c; -register char *s; -{ - while (*s) - if (*s++ == c) - return(1); - return(0); -} - -char * -putn(n) -register int n; -{ - return(itoa(n, -1)); -} - -char * -itoa(u, n) -register unsigned u; -int n; -{ - register char *cp; - static char s[20]; - int m; - - m = 0; - if (n < 0 && (int) u < 0) { - m++; - u = -u; - } - cp = s+sizeof(s); - *--cp = 0; - do { - *--cp = u%10 + '0'; - u /= 10; - } while (--n > 0 || u); - if (m) - *--cp = '-'; - return(cp); -} - -void -next(f) -int f; -{ - PUSHIO(afile, f, filechar); -} - -void -onintr(s) -int s; /* ANSI C requires a parameter */ -{ - signal(SIGINT, onintr); - intr = 1; - if (talking) { - if (inparse) { - prs("\n"); - fail(); - } - } - else if (heedint) { - execflg = 0; - leave(); - } -} - -int -letter(c) -register c; -{ - return((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_'); -} - -int -digit(c) -register c; -{ - return(c >= '0' && c <= '9'); -} - -int -letnum(c) -register c; -{ - return(letter(c) || digit(c)); -} - -char * -space(n) -int n; -{ - register char *cp; - - if ((cp = getcell(n)) == 0) - err("out of string space"); - return(cp); -} - -char * -strsave(s, a) -register char *s; -int a; -{ - register char *cp, *xp; - - if ((cp = space(strlen(s)+1)) != NULL) { - setarea((char *)cp, a); - for (xp = cp; (*xp++ = *s++) != '\0';) - ; - return(cp); - } - return(""); -} - -void -xfree(s) -register char *s; -{ - DELETE(s); -} - -/* - * trap handling - */ -void -sig(i) -register int i; -{ - trapset = i; - signal(i, sig); -} - -void runtrap(i) -int i; -{ - char *trapstr; - - if ((trapstr = trap[i]) == NULL) - return; - if (i == 0) - trap[i] = 0; - RUN(aword, trapstr, nlchar); -} - -/* -------- var.c -------- */ -/* #include "sh.h" */ - -/* - * Find the given name in the dictionary - * and return its value. If the name was - * not previously there, enter it now and - * return a null value. - */ -struct var * -lookup(n) -register char *n; -{ - register struct var *vp; - register char *cp; - register int c; - static struct var dummy; - - if (digit(*n)) { - dummy.name = n; - for (c = 0; digit(*n) && c < 1000; n++) - c = c*10 + *n-'0'; - dummy.status = RONLY; - dummy.value = c <= dolc? dolv[c]: null; - return(&dummy); - } - for (vp = vlist; vp; vp = vp->next) - if (eqname(vp->name, n)) - return(vp); - cp = findeq(n); - vp = (struct var *)space(sizeof(*vp)); - if (vp == 0 || (vp->name = space((int)(cp-n)+2)) == 0) { - dummy.name = dummy.value = ""; - return(&dummy); - } - for (cp = vp->name; (*cp = *n++) && *cp != '='; cp++) - ; - if (*cp == 0) - *cp = '='; - *++cp = 0; - setarea((char *)vp, 0); - setarea((char *)vp->name, 0); - vp->value = null; - vp->next = vlist; - vp->status = GETCELL; - vlist = vp; - return(vp); -} - -/* - * give variable at `vp' the value `val'. - */ -void -setval(vp, val) -struct var *vp; -char *val; -{ - nameval(vp, val, (char *)NULL); -} - -/* - * if name is not NULL, it must be - * a prefix of the space `val', - * and end with `='. - * this is all so that exporting - * values is reasonably painless. - */ -void -nameval(vp, val, name) -register struct var *vp; -char *val, *name; -{ - register char *cp, *xp; - char *nv; - int fl; - - if (vp->status & RONLY) { - for (xp = vp->name; *xp && *xp != '=';) - putc(*xp++); - err(" is read-only"); - return; - } - fl = 0; - if (name == NULL) { - xp = space(strlen(vp->name)+strlen(val)+2); - if (xp == 0) - return; - /* make string: name=value */ - setarea((char *)xp, 0); - name = xp; - for (cp = vp->name; (*xp = *cp++) && *xp!='='; xp++) - ; - if (*xp++ == 0) - xp[-1] = '='; - nv = xp; - for (cp = val; (*xp++ = *cp++) != '\0';) - ; - val = nv; - fl = GETCELL; - } - if (vp->status & GETCELL) - xfree(vp->name); /* form new string `name=value' */ - vp->name = name; - vp->value = val; - vp->status |= fl; -} - -void -export(vp) -struct var *vp; -{ - vp->status |= EXPORT; -} - -void -ronly(vp) -struct var *vp; -{ - if (letter(vp->name[0])) /* not an internal symbol ($# etc) */ - vp->status |= RONLY; -} - -int -isassign(s) -register char *s; -{ - if (!letter((int)*s)) - return(0); - for (; *s != '='; s++) - if (*s == 0 || !letnum(*s)) - return(0); - return(1); -} - -int -assign(s, cf) -register char *s; -int cf; -{ - register char *cp; - struct var *vp; - - if (!letter(*s)) - return(0); - for (cp = s; *cp != '='; cp++) - if (*cp == 0 || !letnum(*cp)) - return(0); - vp = lookup(s); - nameval(vp, ++cp, cf == COPYV? (char *)NULL: s); - if (cf != COPYV) - vp->status &= ~GETCELL; - return(1); -} - -int -checkname(cp) -register char *cp; -{ - if (!letter(*cp++)) - return(0); - while (*cp) - if (!letnum(*cp++)) - return(0); - return(1); -} - -void -putvlist(f, out) -register int f, out; -{ - register struct var *vp; - - for (vp = vlist; vp; vp = vp->next) - if (vp->status & f && letter(*vp->name)) { - if (vp->status & EXPORT) - write(out, "export ", 7); - if (vp->status & RONLY) - write(out, "readonly ", 9); - write(out, vp->name, (int)(findeq(vp->name) - vp->name)); - write(out, "\n", 1); - } -} - -int -eqname(n1, n2) -register char *n1, *n2; -{ - for (; *n1 != '=' && *n1 != 0; n1++) - if (*n2++ != *n1) - return(0); - return(*n2 == 0 || *n2 == '='); -} - -static char * -findeq(cp) -register char *cp; -{ - while (*cp != '\0' && *cp != '=') - cp++; - return(cp); -} - -/* -------- gmatch.c -------- */ -/* - * int gmatch(string, pattern) - * char *string, *pattern; - * - * Match a pattern as in sh(1). - */ - -#define CMASK 0377 -#define QUOTE 0200 -#define QMASK (CMASK&~QUOTE) -#define NOT '!' /* might use ^ */ - -int -gmatch(s, p) -register char *s, *p; -{ - register int sc, pc; - - if (s == NULL || p == NULL) - return(0); - while ((pc = *p++ & CMASK) != '\0') { - sc = *s++ & QMASK; - switch (pc) { - case '[': - if ((p = cclass(p, sc)) == NULL) - return(0); - break; - - case '?': - if (sc == 0) - return(0); - break; - - case '*': - s--; - do { - if (*p == '\0' || gmatch(s, p)) - return(1); - } while (*s++ != '\0'); - return(0); - - default: - if (sc != (pc&~QUOTE)) - return(0); - } - } - return(*s == 0); -} - -static char * -cclass(p, sub) -register char *p; -register int sub; -{ - register int c, d, not, found; - - if ((not = *p == NOT) != 0) - p++; - found = not; - do { - if (*p == '\0') - return((char *)NULL); - c = *p & CMASK; - if (p[1] == '-' && p[2] != ']') { - d = p[2] & CMASK; - p++; - } else - d = c; - if (c == sub || (c <= sub && sub <= d)) - found = !not; - } while (*++p != ']'); - return(found? p+1: (char *)NULL); -} - -/* -------- area.c -------- */ -#define REGSIZE sizeof(struct region) -#define GROWBY 256 -#undef SHRINKBY 64 -#define FREE 32767 -#define BUSY 0 -#define ALIGN (sizeof(int)-1) - -/* #include "area.h" */ - -struct region { - struct region *next; - int area; -}; - -/* - * All memory between (char *)areabot and (char *)(areatop+1) is - * exclusively administered by the area management routines. - * It is assumed that sbrk() and brk() manipulate the high end. - */ -static struct region *areabot; /* bottom of area */ -static struct region *areatop; /* top of area */ -static struct region *areanxt; /* starting point of scan */ - -void -initarea() -{ - while ((int)sbrk(0) & ALIGN) - sbrk(1); - areabot = (struct region *)sbrk(REGSIZE); - areabot->next = areabot; - areabot->area = BUSY; - areatop = areabot; - areanxt = areabot; -} - -char * -getcell(nbytes) -unsigned nbytes; -{ - register int nregio; - register struct region *p, *q; - register i; - - if (nbytes == 0) - abort(); /* silly and defeats the algorithm */ - /* - * round upwards and add administration area - */ - nregio = (nbytes+(REGSIZE-1))/REGSIZE + 1; - for (p = areanxt;;) { - if (p->area > areanum) { - /* - * merge free cells - */ - while ((q = p->next)->area > areanum && q != areanxt) - p->next = q->next; - /* - * exit loop if cell big enough - */ - if (q >= p + nregio) - goto found; - } - p = p->next; - if (p == areanxt) - break; - } - i = nregio >= GROWBY ? nregio : GROWBY; - p = (struct region *)sbrk(i * REGSIZE); - if (p == (struct region *)-1) - return((char *)NULL); - p--; - if (p != areatop) - abort(); /* allocated areas are contiguous */ - q = p + i; - p->next = q; - p->area = FREE; - q->next = areabot; - q->area = BUSY; - areatop = q; -found: - /* - * we found a FREE area big enough, pointed to by 'p', and up to 'q' - */ - areanxt = p + nregio; - if (areanxt < q) { - /* - * split into requested area and rest - */ - if (areanxt+1 > q) - abort(); /* insufficient space left for admin */ - areanxt->next = q; - areanxt->area = FREE; - p->next = areanxt; - } - p->area = areanum; - return((char *)(p+1)); -} - -void -freecell(cp) -char *cp; -{ - register struct region *p; - - if ((p = (struct region *)cp) != NULL) { - p--; - if (p < areanxt) - areanxt = p; - p->area = FREE; - } -} - -void -freearea(a) -register int a; -{ - register struct region *p, *top; - - top = areatop; - for (p = areabot; p != top; p = p->next) - if (p->area >= a) - p->area = FREE; -} - -void -setarea(cp,a) -char *cp; -int a; -{ - register struct region *p; - - if ((p = (struct region *)cp) != NULL) - (p-1)->area = a; -} - -int -getarea(cp) -char *cp; -{ - return ((struct region*)cp-1)->area; -} - -void -garbage() -{ - register struct region *p, *q, *top; - - top = areatop; - for (p = areabot; p != top; p = p->next) { - if (p->area > areanum) { - while ((q = p->next)->area > areanum) - p->next = q->next; - areanxt = p; - } - } -#ifdef SHRINKBY - if (areatop >= q + SHRINKBY && q->area > areanum) { - brk((char *)(q+1)); - q->next = areabot; - q->area = BUSY; - areatop = q; - } -#endif -} Property changes on: head/release/picobsd/tinyware/msh/sh1.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/msh/sh2.c =================================================================== --- head/release/picobsd/tinyware/msh/sh2.c (revision 354345) +++ head/release/picobsd/tinyware/msh/sh2.c (nonexistent) @@ -1,801 +0,0 @@ -#define Extern extern -#include -#include -#define _NSIG NSIG -#include -#include -#include "sh.h" - -/* -------- csyn.c -------- */ -/* - * shell: syntax (C version) - */ - -typedef union { - char *cp; - char **wp; - int i; - struct op *o; -} YYSTYPE; -#define WORD 256 -#define LOGAND 257 -#define LOGOR 258 -#define BREAK 259 -#define IF 260 -#define THEN 261 -#define ELSE 262 -#define ELIF 263 -#define FI 264 -#define CASE 265 -#define ESAC 266 -#define FOR 267 -#define WHILE 268 -#define UNTIL 269 -#define DO 270 -#define DONE 271 -#define IN 272 -#define YYERRCODE 300 - -/* flags to yylex */ -#define CONTIN 01 /* skip new lines to complete command */ - -/* #include "sh.h" */ -#define SYNTAXERR zzerr() -static int startl; -static int peeksym; -static int nlseen; -static int iounit = IODEFAULT; - -static YYSTYPE yylval; - -_PROTOTYPE(static struct op *pipeline, (int cf )); -_PROTOTYPE(static struct op *andor, (void)); -_PROTOTYPE(static struct op *c_list, (void)); -_PROTOTYPE(static int synio, (int cf )); -_PROTOTYPE(static void musthave, (int c, int cf )); -_PROTOTYPE(static struct op *simple, (void)); -_PROTOTYPE(static struct op *nested, (int type, int mark )); -_PROTOTYPE(static struct op *command, (int cf )); -_PROTOTYPE(static struct op *dogroup, (int onlydone )); -_PROTOTYPE(static struct op *thenpart, (void)); -_PROTOTYPE(static struct op *elsepart, (void)); -_PROTOTYPE(static struct op *caselist, (void)); -_PROTOTYPE(static struct op *casepart, (void)); -_PROTOTYPE(static char **pattern, (void)); -_PROTOTYPE(static char **wordlist, (void)); -_PROTOTYPE(static struct op *list, (struct op *t1, struct op *t2 )); -_PROTOTYPE(static struct op *block, (int type, struct op *t1, struct op *t2, char **wp )); -_PROTOTYPE(static struct op *newtp, (void)); -_PROTOTYPE(static struct op *namelist, (struct op *t )); -_PROTOTYPE(static char **copyw, (void)); -_PROTOTYPE(static void word, (char *cp )); -_PROTOTYPE(static struct ioword **copyio, (void)); -_PROTOTYPE(static struct ioword *io, (int u, int f, char *cp )); -_PROTOTYPE(static void zzerr, (void)); -_PROTOTYPE(void yyerror, (char *s )); -_PROTOTYPE(static int yylex, (int cf )); -_PROTOTYPE(int collect, (int c, int c1 )); -_PROTOTYPE(int dual, (int c )); -_PROTOTYPE(static void diag, (int ec )); -_PROTOTYPE(static char *tree, (unsigned size )); -_PROTOTYPE(void printf, (char *s )); - -int -yyparse() -{ - startl = 1; - peeksym = 0; - yynerrs = 0; - outtree = c_list(); - musthave('\n', 0); - return(yynerrs!=0); -} - -static struct op * -pipeline(cf) -int cf; -{ - register struct op *t, *p; - register int c; - - t = command(cf); - if (t != NULL) { - while ((c = yylex(0)) == '|') { - if ((p = command(CONTIN)) == NULL) - SYNTAXERR; - if (t->type != TPAREN && t->type != TCOM) { - /* shell statement */ - t = block(TPAREN, t, NOBLOCK, NOWORDS); - } - t = block(TPIPE, t, p, NOWORDS); - } - peeksym = c; - } - return(t); -} - -static struct op * -andor() -{ - register struct op *t, *p; - register int c; - - t = pipeline(0); - if (t != NULL) { - while ((c = yylex(0)) == LOGAND || c == LOGOR) { - if ((p = pipeline(CONTIN)) == NULL) - SYNTAXERR; - t = block(c == LOGAND? TAND: TOR, t, p, NOWORDS); - } - peeksym = c; - } - return(t); -} - -static struct op * -c_list() -{ - register struct op *t, *p; - register int c; - - t = andor(); - if (t != NULL) { - if((peeksym = yylex(0)) == '&') - t = block(TASYNC, t, NOBLOCK, NOWORDS); - while ((c = yylex(0)) == ';' || c == '&' || (multiline && c == '\n')) { - if ((p = andor()) == NULL) - return(t); - if((peeksym = yylex(0)) == '&') - p = block(TASYNC, p, NOBLOCK, NOWORDS); - t = list(t, p); - } - peeksym = c; - } - return(t); -} - - -static int -synio(cf) -int cf; -{ - register struct ioword *iop; - register int i; - register int c; - - if ((c = yylex(cf)) != '<' && c != '>') { - peeksym = c; - return(0); - } - i = yylval.i; - musthave(WORD, 0); - iop = io(iounit, i, yylval.cp); - iounit = IODEFAULT; - if (i & IOHERE) - markhere(yylval.cp, iop); - return(1); -} - -static void -musthave(c, cf) -int c, cf; -{ - if ((peeksym = yylex(cf)) != c) - SYNTAXERR; - peeksym = 0; -} - -static struct op * -simple() -{ - register struct op *t; - - t = NULL; - for (;;) { - switch (peeksym = yylex(0)) { - case '<': - case '>': - (void) synio(0); - break; - - case WORD: - if (t == NULL) { - t = newtp(); - t->type = TCOM; - } - peeksym = 0; - word(yylval.cp); - break; - - default: - return(t); - } - } -} - -static struct op * -nested(type, mark) -int type, mark; -{ - register struct op *t; - - multiline++; - t = c_list(); - musthave(mark, 0); - multiline--; - return(block(type, t, NOBLOCK, NOWORDS)); -} - -static struct op * -command(cf) -int cf; -{ - register struct op *t; - struct wdblock *iosave; - register int c; - - iosave = iolist; - iolist = NULL; - if (multiline) - cf |= CONTIN; - while (synio(cf)) - cf = 0; - switch (c = yylex(cf)) { - default: - peeksym = c; - if ((t = simple()) == NULL) { - if (iolist == NULL) - return((struct op *)NULL); - t = newtp(); - t->type = TCOM; - } - break; - - case '(': - t = nested(TPAREN, ')'); - break; - - case '{': - t = nested(TBRACE, '}'); - break; - - case FOR: - t = newtp(); - t->type = TFOR; - musthave(WORD, 0); - startl = 1; - t->str = yylval.cp; - multiline++; - t->words = wordlist(); - if ((c = yylex(0)) != '\n' && c != ';') - peeksym = c; - t->left = dogroup(0); - multiline--; - break; - - case WHILE: - case UNTIL: - multiline++; - t = newtp(); - t->type = c == WHILE? TWHILE: TUNTIL; - t->left = c_list(); - t->right = dogroup(1); - t->words = NULL; - multiline--; - break; - - case CASE: - t = newtp(); - t->type = TCASE; - musthave(WORD, 0); - t->str = yylval.cp; - startl++; - multiline++; - musthave(IN, CONTIN); - startl++; - t->left = caselist(); - musthave(ESAC, 0); - multiline--; - break; - - case IF: - multiline++; - t = newtp(); - t->type = TIF; - t->left = c_list(); - t->right = thenpart(); - musthave(FI, 0); - multiline--; - break; - } - while (synio(0)) - ; - t = namelist(t); - iolist = iosave; - return(t); -} - -static struct op * -dogroup(onlydone) -int onlydone; -{ - register int c; - register struct op *list; - - c = yylex(CONTIN); - if (c == DONE && onlydone) - return((struct op *)NULL); - if (c != DO) - SYNTAXERR; - list = c_list(); - musthave(DONE, 0); - return(list); -} - -static struct op * -thenpart() -{ - register int c; - register struct op *t; - - if ((c = yylex(0)) != THEN) { - peeksym = c; - return((struct op *)NULL); - } - t = newtp(); - t->type = 0; - t->left = c_list(); - if (t->left == NULL) - SYNTAXERR; - t->right = elsepart(); - return(t); -} - -static struct op * -elsepart() -{ - register int c; - register struct op *t; - - switch (c = yylex(0)) { - case ELSE: - if ((t = c_list()) == NULL) - SYNTAXERR; - return(t); - - case ELIF: - t = newtp(); - t->type = TELIF; - t->left = c_list(); - t->right = thenpart(); - return(t); - - default: - peeksym = c; - return((struct op *)NULL); - } -} - -static struct op * -caselist() -{ - register struct op *t; - - t = NULL; - while ((peeksym = yylex(CONTIN)) != ESAC) - t = list(t, casepart()); - return(t); -} - -static struct op * -casepart() -{ - register struct op *t; - - t = newtp(); - t->type = TPAT; - t->words = pattern(); - musthave(')', 0); - t->left = c_list(); - if ((peeksym = yylex(CONTIN)) != ESAC) - musthave(BREAK, CONTIN); - return(t); -} - -static char ** -pattern() -{ - register int c, cf; - - cf = CONTIN; - do { - musthave(WORD, cf); - word(yylval.cp); - cf = 0; - } while ((c = yylex(0)) == '|'); - peeksym = c; - word(NOWORD); - return(copyw()); -} - -static char ** -wordlist() -{ - register int c; - - if ((c = yylex(0)) != IN) { - peeksym = c; - return((char **)NULL); - } - startl = 0; - while ((c = yylex(0)) == WORD) - word(yylval.cp); - word(NOWORD); - peeksym = c; - return(copyw()); -} - -/* - * supporting functions - */ -static struct op * -list(t1, t2) -register struct op *t1, *t2; -{ - if (t1 == NULL) - return(t2); - if (t2 == NULL) - return(t1); - return(block(TLIST, t1, t2, NOWORDS)); -} - -static struct op * -block(type, t1, t2, wp) -int type; -struct op *t1, *t2; -char **wp; -{ - register struct op *t; - - t = newtp(); - t->type = type; - t->left = t1; - t->right = t2; - t->words = wp; - return(t); -} - -struct res { - char *r_name; - int r_val; -} restab[] = { - "for", FOR, - "case", CASE, - "esac", ESAC, - "while", WHILE, - "do", DO, - "done", DONE, - "if", IF, - "in", IN, - "then", THEN, - "else", ELSE, - "elif", ELIF, - "until", UNTIL, - "fi", FI, - - ";;", BREAK, - "||", LOGOR, - "&&", LOGAND, - "{", '{', - "}", '}', - - 0, -}; - -int -rlookup(n) -register char *n; -{ - register struct res *rp; - - for (rp = restab; rp->r_name; rp++) - if (strcmp(rp->r_name, n) == 0) - return(rp->r_val); - return(0); -} - -static struct op * -newtp() -{ - register struct op *t; - - t = (struct op *)tree(sizeof(*t)); - t->type = 0; - t->words = NULL; - t->ioact = NULL; - t->left = NULL; - t->right = NULL; - t->str = NULL; - return(t); -} - -static struct op * -namelist(t) -register struct op *t; -{ - if (iolist) { - iolist = addword((char *)NULL, iolist); - t->ioact = copyio(); - } else - t->ioact = NULL; - if (t->type != TCOM) { - if (t->type != TPAREN && t->ioact != NULL) { - t = block(TPAREN, t, NOBLOCK, NOWORDS); - t->ioact = t->left->ioact; - t->left->ioact = NULL; - } - return(t); - } - word(NOWORD); - t->words = copyw(); - return(t); -} - -static char ** -copyw() -{ - register char **wd; - - wd = getwords(wdlist); - wdlist = 0; - return(wd); -} - -static void -word(cp) -char *cp; -{ - wdlist = addword(cp, wdlist); -} - -static struct ioword ** -copyio() -{ - register struct ioword **iop; - - iop = (struct ioword **) getwords(iolist); - iolist = 0; - return(iop); -} - -static struct ioword * -io(u, f, cp) -int u; -int f; -char *cp; -{ - register struct ioword *iop; - - iop = (struct ioword *) tree(sizeof(*iop)); - iop->io_unit = u; - iop->io_flag = f; - iop->io_name = cp; - iolist = addword((char *)iop, iolist); - return(iop); -} - -static void -zzerr() -{ - yyerror("syntax error"); -} - -void -yyerror(s) -char *s; -{ - yynerrs++; - if (talking && e.iop <= iostack) { - multiline = 0; - while (eofc() == 0 && yylex(0) != '\n') - ; - } - err(s); - fail(); -} - -static int -yylex(cf) -int cf; -{ - register int c, c1; - int atstart; - - if ((c = peeksym) > 0) { - peeksym = 0; - if (c == '\n') - startl = 1; - return(c); - } - nlseen = 0; - e.linep = line; - atstart = startl; - startl = 0; - yylval.i = 0; - -loop: - while ((c = getc(0)) == ' ' || c == '\t') - ; - switch (c) { - default: - if (any(c, "0123456789")) { - unget(c1 = getc(0)); - if (c1 == '<' || c1 == '>') { - iounit = c - '0'; - goto loop; - } - *e.linep++ = c; - c = c1; - } - break; - - case '#': - while ((c = getc(0)) != 0 && c != '\n') - ; - unget(c); - goto loop; - - case 0: - return(c); - - case '$': - *e.linep++ = c; - if ((c = getc(0)) == '{') { - if ((c = collect(c, '}')) != '\0') - return(c); - goto pack; - } - break; - - case '`': - case '\'': - case '"': - if ((c = collect(c, c)) != '\0') - return(c); - goto pack; - - case '|': - case '&': - case ';': - if ((c1 = dual(c)) != '\0') { - startl = 1; - return(c1); - } - startl = 1; - return(c); - case '^': - startl = 1; - return('|'); - case '>': - case '<': - diag(c); - return(c); - - case '\n': - nlseen++; - gethere(); - startl = 1; - if (multiline || cf & CONTIN) { - if (talking && e.iop <= iostack) - prs(cprompt->value); - if (cf & CONTIN) - goto loop; - } - return(c); - - case '(': - case ')': - startl = 1; - return(c); - } - - unget(c); - -pack: - while ((c = getc(0)) != 0 && !any(c, "`$ '\"\t;&<>()|^\n")) - if (e.linep >= elinep) - err("word too long"); - else - *e.linep++ = c; - unget(c); - if(any(c, "\"'`$")) - goto loop; - *e.linep++ = '\0'; - if (atstart && (c = rlookup(line))!=0) { - startl = 1; - return(c); - } - yylval.cp = strsave(line, areanum); - return(WORD); -} - -int -collect(c, c1) -register c, c1; -{ - char s[2]; - - *e.linep++ = c; - while ((c = getc(c1)) != c1) { - if (c == 0) { - unget(c); - s[0] = c1; - s[1] = 0; - prs("no closing "); yyerror(s); - return(YYERRCODE); - } - if (talking && c == '\n' && e.iop <= iostack) - prs(cprompt->value); - *e.linep++ = c; - } - *e.linep++ = c; - return(0); -} - -int -dual(c) -register c; -{ - char s[3]; - register char *cp = s; - - *cp++ = c; - *cp++ = getc(0); - *cp = 0; - if ((c = rlookup(s)) == 0) - unget(*--cp); - return(c); -} - -static void -diag(ec) -register int ec; -{ - register int c; - - c = getc(0); - if (c == '>' || c == '<') { - if (c != ec) - zzerr(); - yylval.i = ec == '>'? IOWRITE|IOCAT: IOHERE; - c = getc(0); - } else - yylval.i = ec == '>'? IOWRITE: IOREAD; - if (c != '&' || yylval.i == IOHERE) - unget(c); - else - yylval.i |= IODUP; -} - -static char * -tree(size) -unsigned size; -{ - register char *t; - - if ((t = getcell(size)) == NULL) { - prs("command line too complicated\n"); - fail(); - /* NOTREACHED */ - } - return(t); -} - -/* VARARGS1 */ -/* ARGSUSED */ -void -printf(s) /* yyparse calls it */ -char *s; -{ -} - Property changes on: head/release/picobsd/tinyware/msh/sh2.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/msh/sh3.c =================================================================== --- head/release/picobsd/tinyware/msh/sh3.c (revision 354345) +++ head/release/picobsd/tinyware/msh/sh3.c (nonexistent) @@ -1,1143 +0,0 @@ -#define Extern extern -#include -#include -#define _NSIG NSIG -#include -#include -#include -#include -#include -#include -#include -#undef NULL -#include "sh.h" - -/* -------- exec.c -------- */ -/* #include "sh.h" */ - -/* - * execute tree - */ - -static char *signame[] = { - "Signal 0", - "Hangup", - (char *)NULL, /* interrupt */ - "Quit", - "Illegal instruction", - "Trace/BPT trap", - "Abort", - "EMT trap", - "Floating exception", - "Killed", - "Bus error", - "Memory fault", - "Bad system call", - (char *)NULL, /* broken pipe */ - "Alarm clock", - "Terminated", -}; -#define NSIGNAL (sizeof(signame)/sizeof(signame[0])) - - -_PROTOTYPE(static int forkexec, (struct op *t, int *pin, int *pout, int act, char **wp, int *pforked )); -_PROTOTYPE(static int parent, (void)); -_PROTOTYPE(int iosetup, (struct ioword *iop, int pipein, int pipeout )); -_PROTOTYPE(static void echo, (char **wp )); -_PROTOTYPE(static struct op **find1case, (struct op *t, char *w )); -_PROTOTYPE(static struct op *findcase, (struct op *t, char *w )); -_PROTOTYPE(static void brkset, (struct brkcon *bc )); -_PROTOTYPE(int dolabel, (void)); -_PROTOTYPE(int dochdir, (struct op *t )); -_PROTOTYPE(int doshift, (struct op *t )); -_PROTOTYPE(int dologin, (struct op *t )); -_PROTOTYPE(int doumask, (struct op *t )); -_PROTOTYPE(int doexec, (struct op *t )); -_PROTOTYPE(int dodot, (struct op *t )); -_PROTOTYPE(int dowait, (struct op *t )); -_PROTOTYPE(int doread, (struct op *t )); -_PROTOTYPE(int doeval, (struct op *t )); -_PROTOTYPE(int dotrap, (struct op *t )); -_PROTOTYPE(int getsig, (char *s )); -_PROTOTYPE(void setsig, (int n, void (*f)())); -_PROTOTYPE(int getn, (char *as )); -_PROTOTYPE(int dobreak, (struct op *t )); -_PROTOTYPE(int docontinue, (struct op *t )); -_PROTOTYPE(static int brkcontin, (char *cp, int val )); -_PROTOTYPE(int doexit, (struct op *t )); -_PROTOTYPE(int doexport, (struct op *t )); -_PROTOTYPE(int doreadonly, (struct op *t )); -_PROTOTYPE(static void rdexp, (char **wp, void (*f)(), int key)); -_PROTOTYPE(static void badid, (char *s )); -_PROTOTYPE(int doset, (struct op *t )); -_PROTOTYPE(void varput, (char *s, int out )); -_PROTOTYPE(int dotimes, (void)); - -int -execute(t, pin, pout, act) -register struct op *t; -int *pin, *pout; -int act; -{ - register struct op *t1; - int i, pv[2], rv, child, a; - char *cp, **wp, **wp2; - struct var *vp; - struct brkcon bc; - - if (t == NULL) - return(0); - rv = 0; - a = areanum++; - wp = (wp2 = t->words) != NULL - ? eval(wp2, t->type == TCOM ? DOALL : DOALL & ~DOKEY) - : NULL; - - switch(t->type) { - case TPAREN: - case TCOM: - rv = forkexec(t, pin, pout, act, wp, &child); - if (child) { - exstat = rv; - leave(); - } - break; - - case TPIPE: - if ((rv = openpipe(pv)) < 0) - break; - pv[0] = remap(pv[0]); - pv[1] = remap(pv[1]); - (void) execute(t->left, pin, pv, 0); - rv = execute(t->right, pv, pout, 0); - break; - - case TLIST: - (void) execute(t->left, pin, pout, 0); - rv = execute(t->right, pin, pout, 0); - break; - - case TASYNC: - i = parent(); - if (i != 0) { - if (i != -1) { - setval(lookup("!"), putn(i)); - if (pin != NULL) - closepipe(pin); - if (talking) { - prs(putn(i)); - prs("\n"); - } - } else - rv = -1; - setstatus(rv); - } else { - signal(SIGINT, SIG_IGN); - signal(SIGQUIT, SIG_IGN); - if (talking) - signal(SIGTERM, SIG_DFL); - talking = 0; - if (pin == NULL) { - close(0); - open("/dev/null", 0); - } - exit(execute(t->left, pin, pout, FEXEC)); - } - break; - - case TOR: - case TAND: - rv = execute(t->left, pin, pout, 0); - if ((t1 = t->right)!=NULL && (rv == 0) == (t->type == TAND)) - rv = execute(t1, pin, pout, 0); - break; - - case TFOR: - if (wp == NULL) { - wp = dolv+1; - if ((i = dolc) < 0) - i = 0; - } else { - i = -1; - while (*wp++ != NULL) - ; - } - vp = lookup(t->str); - while (setjmp(bc.brkpt)) - if (isbreak) - goto broken; - brkset(&bc); - for (t1 = t->left; i-- && *wp != NULL;) { - setval(vp, *wp++); - rv = execute(t1, pin, pout, 0); - } - brklist = brklist->nextlev; - break; - - case TWHILE: - case TUNTIL: - while (setjmp(bc.brkpt)) - if (isbreak) - goto broken; - brkset(&bc); - t1 = t->left; - while ((execute(t1, pin, pout, 0) == 0) == (t->type == TWHILE)) - rv = execute(t->right, pin, pout, 0); - brklist = brklist->nextlev; - break; - - case TIF: - case TELIF: - if (t->right != NULL) { - rv = !execute(t->left, pin, pout, 0) ? - execute(t->right->left, pin, pout, 0): - execute(t->right->right, pin, pout, 0); - } - break; - - case TCASE: - if ((cp = evalstr(t->str, DOSUB|DOTRIM)) == 0) - cp = ""; - if ((t1 = findcase(t->left, cp)) != NULL) - rv = execute(t1, pin, pout, 0); - break; - - case TBRACE: -/* - if (iopp = t->ioact) - while (*iopp) - if (iosetup(*iopp++, pin!=NULL, pout!=NULL)) { - rv = -1; - break; - } -*/ - if (rv >= 0 && (t1 = t->left)) - rv = execute(t1, pin, pout, 0); - break; - } - -broken: - t->words = wp2; - isbreak = 0; - freehere(areanum); - freearea(areanum); - areanum = a; - if (talking && intr) { - closeall(); - fail(); - } - if ((i = trapset) != 0) { - trapset = 0; - runtrap(i); - } - return(rv); -} - -static int -forkexec(t, pin, pout, act, wp, pforked) -register struct op *t; -int *pin, *pout; -int act; -char **wp; -int *pforked; -{ - int i, rv, (*shcom)(); - register int f; - char *cp; - struct ioword **iopp; - int resetsig; - char **owp; - - owp = wp; - resetsig = 0; - *pforked = 0; - shcom = NULL; - rv = -1; /* system-detected error */ - if (t->type == TCOM) { - while ((cp = *wp++) != NULL) - ; - cp = *wp; - - /* strip all initial assignments */ - /* not correct wrt PATH=yyy command etc */ - if (flag['x']) - echo (cp ? wp: owp); - if (cp == NULL && t->ioact == NULL) { - while ((cp = *owp++) != NULL && assign(cp, COPYV)) - ; - return(setstatus(0)); - } - else if (cp != NULL) - shcom = inbuilt(cp); - } - t->words = wp; - f = act; - if (shcom == NULL && (f & FEXEC) == 0) { - i = parent(); - if (i != 0) { - if (i == -1) - return(rv); - if (pin != NULL) - closepipe(pin); - return(pout==NULL? setstatus(waitfor(i,0)): 0); - } - if (talking) { - signal(SIGINT, SIG_IGN); - signal(SIGQUIT, SIG_IGN); - resetsig = 1; - } - talking = 0; - intr = 0; - (*pforked)++; - brklist = 0; - execflg = 0; - } - if (owp != NULL) - while ((cp = *owp++) != NULL && assign(cp, COPYV)) - if (shcom == NULL) - export(lookup(cp)); -#ifdef COMPIPE - if ((pin != NULL || pout != NULL) && shcom != NULL && shcom != doexec) { - err("piping to/from shell builtins not yet done"); - return(-1); - } -#endif - if (pin != NULL) { - dup2(pin[0], 0); - closepipe(pin); - } - if (pout != NULL) { - dup2(pout[1], 1); - closepipe(pout); - } - if ((iopp = t->ioact) != NULL) { - if (shcom != NULL && shcom != doexec) { - prs(cp); - err(": cannot redirect shell command"); - return(-1); - } - while (*iopp) - if (iosetup(*iopp++, pin!=NULL, pout!=NULL)) - return(rv); - } - if (shcom) - return(setstatus((*shcom)(t))); - /* should use FIOCEXCL */ - for (i=FDBASE; itype == TPAREN) - exit(execute(t->left, NOPIPE, NOPIPE, FEXEC)); - if (wp[0] == NULL) - exit(0); - cp = rexecve(wp[0], wp, makenv()); - prs(wp[0]); prs(": "); warn(cp); - if (!execflg) - trap[0] = NULL; - leave(); - /* NOTREACHED */ -} - -/* - * common actions when creating a new child - */ -static int -parent() -{ - register int i; - - i = fork(); - if (i != 0) { - if (i == -1) - warn("try again"); - } - return(i); -} - -/* - * 0< 1> are ignored as required - * within pipelines. - */ -int -iosetup(iop, pipein, pipeout) -register struct ioword *iop; -int pipein, pipeout; -{ - register u; - char *cp, *msg; - - if (iop->io_unit == IODEFAULT) /* take default */ - iop->io_unit = iop->io_flag&(IOREAD|IOHERE)? 0: 1; - if (pipein && iop->io_unit == 0) - return(0); - if (pipeout && iop->io_unit == 1) - return(0); - msg = iop->io_flag&(IOREAD|IOHERE)? "open": "create"; - if ((iop->io_flag & IOHERE) == 0) { - cp = iop->io_name; - if ((cp = evalstr(cp, DOSUB|DOTRIM)) == NULL) - return(1); - } - if (iop->io_flag & IODUP) { - if (cp[1] || (!digit(*cp) && *cp != '-')) { - prs(cp); - err(": illegal >& argument"); - return(1); - } - if (*cp == '-') - iop->io_flag = IOCLOSE; - iop->io_flag &= ~(IOREAD|IOWRITE); - } - switch (iop->io_flag) { - case IOREAD: - u = open(cp, 0); - break; - - case IOHERE: - case IOHERE|IOXHERE: - u = herein(iop->io_name, iop->io_flag&IOXHERE); - cp = "here file"; - break; - - case IOWRITE|IOCAT: - if ((u = open(cp, 1)) >= 0) { - lseek(u, (long)0, 2); - break; - } - case IOWRITE: - u = creat(cp, 0666); - break; - - case IODUP: - u = dup2(*cp-'0', iop->io_unit); - break; - - case IOCLOSE: - close(iop->io_unit); - return(0); - } - if (u < 0) { - prs(cp); - prs(": cannot "); - warn(msg); - return(1); - } else { - if (u != iop->io_unit) { - dup2(u, iop->io_unit); - close(u); - } - } - return(0); -} - -static void -echo(wp) -register char **wp; -{ - register i; - - prs("+"); - for (i=0; wp[i]; i++) { - if (i) - prs(" "); - prs(wp[i]); - } - prs("\n"); -} - -static struct op ** -find1case(t, w) -struct op *t; -char *w; -{ - register struct op *t1; - struct op **tp; - register char **wp, *cp; - - if (t == NULL) - return((struct op **)NULL); - if (t->type == TLIST) { - if ((tp = find1case(t->left, w)) != NULL) - return(tp); - t1 = t->right; /* TPAT */ - } else - t1 = t; - for (wp = t1->words; *wp;) - if ((cp = evalstr(*wp++, DOSUB)) && gmatch(w, cp)) - return(&t1->left); - return((struct op **)NULL); -} - -static struct op * -findcase(t, w) -struct op *t; -char *w; -{ - register struct op **tp; - - return((tp = find1case(t, w)) != NULL? *tp: (struct op *)NULL); -} - -/* - * Enter a new loop level (marked for break/continue). - */ -static void -brkset(bc) -struct brkcon *bc; -{ - bc->nextlev = brklist; - brklist = bc; -} - -/* - * Wait for the last process created. - * Print a message for each process found - * that was killed by a signal. - * Ignore interrupt signals while waiting - * unless `canintr' is true. - */ -int -waitfor(lastpid, canintr) -register int lastpid; -int canintr; -{ - register int pid, rv; - int s; - int oheedint = heedint; - - heedint = 0; - rv = 0; - do { - pid = wait(&s); - if (pid == -1) { - if (errno != EINTR || canintr) - break; - } else { - if ((rv = WAITSIG(s)) != 0) { - if (rv < NSIGNAL) { - if (signame[rv] != NULL) { - if (pid != lastpid) { - prn(pid); - prs(": "); - } - prs(signame[rv]); - } - } else { - if (pid != lastpid) { - prn(pid); - prs(": "); - } - prs("Signal "); prn(rv); prs(" "); - } - if (WAITCORE(s)) - prs(" - core dumped"); - if (rv >= NSIGNAL || signame[rv]) - prs("\n"); - rv = -1; - } else - rv = WAITVAL(s); - } - } while (pid != lastpid); - heedint = oheedint; - if (intr) - if (talking) { - if (canintr) - intr = 0; - } else { - if (exstat == 0) exstat = rv; - onintr(0); - } - return(rv); -} - -int -setstatus(s) -register int s; -{ - exstat = s; - setval(lookup("?"), putn(s)); - return(s); -} - -/* - * PATH-searching interface to execve. - * If getenv("PATH") were kept up-to-date, - * execvp might be used. - */ -char * -rexecve(c, v, envp) -char *c, **v, **envp; -{ - register int i; - register char *sp, *tp; - int eacces = 0, asis = 0; - - sp = any('/', c)? "": path->value; - asis = *sp == '\0'; - while (asis || *sp != '\0') { - asis = 0; - tp = e.linep; - for (; *sp != '\0'; tp++) - if ((*tp = *sp++) == ':') { - asis = *sp == '\0'; - break; - } - if (tp != e.linep) - *tp++ = '/'; - for (i = 0; (*tp++ = c[i++]) != '\0';) - ; - execve(e.linep, v, envp); - switch (errno) { - case ENOEXEC: - *v = e.linep; - tp = *--v; - *v = e.linep; - execve("/bin/sh", v, envp); - *v = tp; - return("no Shell"); - - case ENOMEM: - return("program too big"); - - case E2BIG: - return("argument list too long"); - - case EACCES: - eacces++; - break; - } - } - return(errno==ENOENT ? "not found" : "cannot execute"); -} - -/* - * Run the command produced by generator `f' - * applied to stream `arg'. - */ -int -run(argp, f) -struct ioarg *argp; -int (*f)(); -{ - struct op *otree; - struct wdblock *swdlist; - struct wdblock *siolist; - jmp_buf ev, rt; - xint *ofail; - int rv; - - areanum++; - swdlist = wdlist; - siolist = iolist; - otree = outtree; - ofail = failpt; - rv = -1; - if (newenv(setjmp(errpt = ev)) == 0) { - wdlist = 0; - iolist = 0; - pushio(argp, f); - e.iobase = e.iop; - yynerrs = 0; - if (setjmp(failpt = rt) == 0 && yyparse() == 0) - rv = execute(outtree, NOPIPE, NOPIPE, 0); - quitenv(); - } - wdlist = swdlist; - iolist = siolist; - failpt = ofail; - outtree = otree; - freearea(areanum--); - return(rv); -} - -/* -------- do.c -------- */ -/* #include "sh.h" */ - -/* - * built-in commands: doX - */ - -int -dolabel() -{ - return(0); -} - -int -dochdir(t) -register struct op *t; -{ - register char *cp, *er; - - if ((cp = t->words[1]) == NULL && (cp = homedir->value) == NULL) - er = ": no home directory"; - else if(chdir(cp) < 0) - er = ": bad directory"; - else - return(0); - prs(cp != NULL? cp: "cd"); - err(er); - return(1); -} - -int -doshift(t) -register struct op *t; -{ - register n; - - n = t->words[1]? getn(t->words[1]): 1; - if(dolc < n) { - err("nothing to shift"); - return(1); - } - dolv[n] = dolv[0]; - dolv += n; - dolc -= n; - setval(lookup("#"), putn(dolc)); - return(0); -} - -/* - * execute login and newgrp directly - */ -int -dologin(t) -struct op *t; -{ - register char *cp; - - if (talking) { - signal(SIGINT, SIG_DFL); - signal(SIGQUIT, SIG_DFL); - } - cp = rexecve(t->words[0], t->words, makenv()); - prs(t->words[0]); prs(": "); err(cp); - return(1); -} - -int -doumask(t) -register struct op *t; -{ - register int i, n; - register char *cp; - - if ((cp = t->words[1]) == NULL) { - i = umask(0); - umask(i); - for (n=3*4; (n-=3) >= 0;) - putc('0'+((i>>n)&07)); - putc('\n'); - } else { - for (n=0; *cp>='0' && *cp<='9'; cp++) - n = n*8 + (*cp-'0'); - umask(n); - } - return(0); -} - -int -doexec(t) -register struct op *t; -{ - register i; - jmp_buf ex; - xint *ofail; - - t->ioact = NULL; - for(i = 0; (t->words[i]=t->words[i+1]) != NULL; i++) - ; - if (i == 0) - return(1); - execflg = 1; - ofail = failpt; - if (setjmp(failpt = ex) == 0) - execute(t, NOPIPE, NOPIPE, FEXEC); - failpt = ofail; - execflg = 0; - return(1); -} - -int -dodot(t) -struct op *t; -{ - register i; - register char *sp, *tp; - char *cp; - - if ((cp = t->words[1]) == NULL) - return(0); - sp = any('/', cp)? ":": path->value; - while (*sp) { - tp = e.linep; - while (*sp && (*tp = *sp++) != ':') - tp++; - if (tp != e.linep) - *tp++ = '/'; - for (i = 0; (*tp++ = cp[i++]) != '\0';) - ; - if ((i = open(e.linep, 0)) >= 0) { - exstat = 0; - next(remap(i)); - return(exstat); - } - } - prs(cp); - err(": not found"); - return(-1); -} - -int -dowait(t) -struct op *t; -{ - register i; - register char *cp; - - if ((cp = t->words[1]) != NULL) { - i = getn(cp); - if (i == 0) - return(0); - } else - i = -1; - setstatus(waitfor(i, 1)); - return(0); -} - -int -doread(t) -struct op *t; -{ - register char *cp, **wp; - register nb; - register int nl = 0; - - if (t->words[1] == NULL) { - err("usage: read name ..."); - return(1); - } - for (wp = t->words+1; *wp; wp++) { - for (cp = e.linep; !nl && cp < elinep-1; cp++) - if ((nb = read(0, cp, sizeof(*cp))) != sizeof(*cp) || - (nl = (*cp == '\n')) || - (wp[1] && any(*cp, ifs->value))) - break; - *cp = 0; - if (nb <= 0) - break; - setval(lookup(*wp), e.linep); - } - return(nb <= 0); -} - -int -doeval(t) -register struct op *t; -{ - return(RUN(awordlist, t->words+1, wdchar)); -} - -int -dotrap(t) -register struct op *t; -{ - register int n, i; - register int resetsig; - - if (t->words[1] == NULL) { - for (i=0; i<=_NSIG; i++) - if (trap[i]) { - prn(i); - prs(": "); - prs(trap[i]); - prs("\n"); - } - return(0); - } - resetsig = digit(*t->words[1]); - for (i = resetsig ? 1 : 2; t->words[i] != NULL; ++i) { - n = getsig(t->words[i]); - xfree(trap[n]); - trap[n] = 0; - if (!resetsig) { - if (*t->words[1] != '\0') { - trap[n] = strsave(t->words[1], 0); - setsig(n, sig); - } else - setsig(n, SIG_IGN); - } else { - if (talking) - if (n == SIGINT) - setsig(n, onintr); - else - setsig(n, n == SIGQUIT ? SIG_IGN - : SIG_DFL); - else - setsig(n, SIG_DFL); - } - } - return(0); -} - -int -getsig(s) -char *s; -{ - register int n; - - if ((n = getn(s)) < 0 || n > _NSIG) { - err("trap: bad signal number"); - n = 0; - } - return(n); -} - -void -setsig(n, f) -register n; -_PROTOTYPE(void (*f), (int)); -{ - if (n == 0) - return; - if (signal(n, SIG_IGN) != SIG_IGN || ourtrap[n]) { - ourtrap[n] = 1; - signal(n, f); - } -} - -int -getn(as) -char *as; -{ - register char *s; - register n, m; - - s = as; - m = 1; - if (*s == '-') { - m = -1; - s++; - } - for (n = 0; digit(*s); s++) - n = (n*10) + (*s-'0'); - if (*s) { - prs(as); - err(": bad number"); - } - return(n*m); -} - -int -dobreak(t) -struct op *t; -{ - return(brkcontin(t->words[1], 1)); -} - -int -docontinue(t) -struct op *t; -{ - return(brkcontin(t->words[1], 0)); -} - -static int -brkcontin(cp, val) -register char *cp; -int val; -{ - register struct brkcon *bc; - register nl; - - nl = cp == NULL? 1: getn(cp); - if (nl <= 0) - nl = 999; - do { - if ((bc = brklist) == NULL) - break; - brklist = bc->nextlev; - } while (--nl); - if (nl) { - err("bad break/continue level"); - return(1); - } - isbreak = val; - longjmp(bc->brkpt, 1); - /* NOTREACHED */ -} - -int -doexit(t) -struct op *t; -{ - register char *cp; - - execflg = 0; - if ((cp = t->words[1]) != NULL) - setstatus(getn(cp)); - leave(); - /* NOTREACHED */ -} - -int -doexport(t) -struct op *t; -{ - rdexp(t->words+1, export, EXPORT); - return(0); -} - -int -doreadonly(t) -struct op *t; -{ - rdexp(t->words+1, ronly, RONLY); - return(0); -} - -static void -rdexp(wp, f, key) -register char **wp; -void (*f)(); -int key; -{ - if (*wp != NULL) { - for (; *wp != NULL; wp++) - if (checkname(*wp)) - (*f)(lookup(*wp)); - else - badid(*wp); - } else - putvlist(key, 1); -} - -static void -badid(s) -register char *s; -{ - prs(s); - err(": bad identifier"); -} - -int -doset(t) -register struct op *t; -{ - register struct var *vp; - register char *cp; - register n; - - if ((cp = t->words[1]) == NULL) { - for (vp = vlist; vp; vp = vp->next) - varput(vp->name, 1); - return(0); - } - if (*cp == '-') { - /* bad: t->words++; */ - for(n = 0; (t->words[n]=t->words[n+1]) != NULL; n++) - ; - if (*++cp == 0) - flag['x'] = flag['v'] = 0; - else - for (; *cp; cp++) - switch (*cp) { - case 'e': - if (!talking) - flag['e']++; - break; - - default: - if (*cp>='a' && *cp<='z') - flag[*cp]++; - break; - } - setdash(); - } - if (t->words[1]) { - t->words[0] = dolv[0]; - for (n=1; t->words[n]; n++) - setarea((char *)t->words[n], 0); - dolc = n-1; - dolv = t->words; - setval(lookup("#"), putn(dolc)); - setarea((char *)(dolv-1), 0); - } - return(0); -} - -void -varput(s, out) -register char *s; -int out; -{ - if (letnum(*s)) { - write(out, s, strlen(s)); - write(out, "\n", 1); - } -} - - -#define SECS 60L -#define MINS 3600L - -int -dotimes() -{ - struct tms tbuf; - - times(&tbuf); - - prn((int)(tbuf.tms_cutime / MINS)); - prs("m"); - prn((int)((tbuf.tms_cutime % MINS) / SECS)); - prs("s "); - prn((int)(tbuf.tms_cstime / MINS)); - prs("m"); - prn((int)((tbuf.tms_cstime % MINS) / SECS)); - prs("s\n"); - return(0); -} - -struct builtin { - char *command; - int (*fn)(); -}; -static struct builtin builtin[] = { - ":", dolabel, - "cd", dochdir, - "shift", doshift, - "exec", doexec, - "wait", dowait, - "read", doread, - "eval", doeval, - "trap", dotrap, - "break", dobreak, - "continue", docontinue, - "exit", doexit, - "export", doexport, - "readonly", doreadonly, - "set", doset, - ".", dodot, - "umask", doumask, - "login", dologin, - "newgrp", dologin, - "times", dotimes, - 0, -}; - -int (*inbuilt(s))() -register char *s; -{ - register struct builtin *bp; - - for (bp = builtin; bp->command != NULL; bp++) - if (strcmp(bp->command, s) == 0) - return(bp->fn); - return((int(*)())NULL); -} - Property changes on: head/release/picobsd/tinyware/msh/sh3.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/view/picobsd.vu =================================================================== --- head/release/picobsd/tinyware/view/picobsd.vu (revision 354345) +++ head/release/picobsd/tinyware/view/picobsd.vu (nonexistent) @@ -1,9 +0,0 @@ -VIEW SCRIPT -7 -/png/logo.png -/png/1.png -/png/2.png -/png/p1.png -/png/p2.png -/png/p3.png -/png/p4.png Property changes on: head/release/picobsd/tinyware/view/picobsd.vu ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/view/README =================================================================== --- head/release/picobsd/tinyware/view/README (revision 354345) +++ head/release/picobsd/tinyware/view/README (nonexistent) @@ -1,86 +0,0 @@ -Warsaw, 1998.08.18 - - VIEW - small PNG viewer - ----------------------- - -This program is intended to serve as a simple console viewer for PNG -graphics. It also features some scripting abilities, which allow you to -build simple presentation. - -In fact, using even this initial version I was able to build a nice -presentation of PicoBSD abilities which I used in real-life situation (you -can see for yourself one of the presentation's screens, fbsd.png). - -The audience was impressed :-), especially when I asked them politely what -are requirements and cost to make that kind of presentation using M$ -products... - -Simple Viewing --------------- - -Usage is as follows: - - view [-g nnn.nnn] [-r x] filename.png - -where - -g nnn.nnn screen gamma (you can adjust how bright is the - picture) - -r x resolution: - 0 - 640x480x16 - 1 - 640x200x256 - 2 - 320x240x256 - -Under right mouse button you can find a simple menu, which tells you also -the hotkeys. You can shift, rotate and zoom the picture. - -Presentation ------------- - -Usage is as above, but the file you give as argument is a (unix) text file -of the following format: - - 1 VIEW SCRIPT - 2 5 - 3 welcome.png - 4 /home/clipart/logo.png - 5 /home/present/title.png - 6 /home/present/outline.png - 7 /home/present/end.png - -(of course without the line numbering or the leading space!). The line number -1 is magic, and must be present in order to recognize the file properly. - -The second line tells how many pictures consist the presentation. The -following lines tell the file names containing the images themselves. - -See the example in file picobsd.vu. - -Command line arguments (gamma and resolution) are as above. You can also use -the pop-up menu to adjust image parameters, as well as go forward or -backward in the presentation. - -Bugs, caveats, missing features -------------------------------- - -* there are some bugs in libvgl which require strange workarounds, and even - then it doesn't work quite right. See the source for the 'XXX' comments... - -* I didn't have time to add gamma adjustment to the pop-up menu. It's - simple, though, and I leave it as an exercise for the reader :-)) - -* it would be great if someone would add GIF and jpeg support. - -* the error checking is probably weak. A bad PNG file or script file will - probably cause a coredump. - -* pop-up menu facilities need more abstraction to be usable in other cases. - -Anyway, as it is even now it's quite usable. - -Have fun! - -Andrzej Bialecki - - - -$FreeBSD$ Property changes on: head/release/picobsd/tinyware/view/README ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/view/fbsd.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = image/png Property changes on: head/release/picobsd/tinyware/view/fbsd.png ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -image/png \ No newline at end of property Index: head/release/picobsd/tinyware/view/view.c =================================================================== --- head/release/picobsd/tinyware/view/view.c (revision 354345) +++ head/release/picobsd/tinyware/view/view.c (nonexistent) @@ -1,619 +0,0 @@ -/*- - * Copyright (c) 1998 Andrzej Bialecki - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -/* - * Small PNG viewer with scripting abilities - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define NUMBER 8 - -extern char *optarg; -extern int optind; - -/* Prototypes */ -int kbd_action(int x, int y, char hotkey); - -struct action { - int zoom; - int rotate; - int Xshift,Yshift; -}; - -struct menu_item { - char *descr; - char hotkey; - int (*func)(int x, int y, char hotkey); -}; - -struct menu_item std_menu[]= { - {"q Quit",'q',kbd_action}, - {"n Next",'n',kbd_action}, - {"p Previous",'p',kbd_action}, - {"Z Zoom in",'Z',kbd_action}, - {"z Zoom out",'z',kbd_action}, - {"r Rotate",'r',kbd_action}, - {"R Refresh",'R',kbd_action}, - {"l Left",'l',kbd_action}, - {"h Right",'h',kbd_action}, - {"j Up",'j',kbd_action}, - {"k Down",'k',kbd_action}, - {NULL,0,NULL} -}; - -char *progname; -VGLBitmap pic,bkg; -struct action a; -byte pal_red[256]; -byte pal_green[256]; -byte pal_blue[256]; -byte pal_colors; -double screen_gamma; -int max_screen_colors=15; -int quit,changed; -char **pres; -int nimg=0; -int auto_chg=0; -int cur_img=0; -char act; -FILE *log; - -void -usage() -{ - fprintf(stderr,"\nVGL graphics viewer, 1.0 (c) Andrzej Bialecki.\n"); - fprintf(stderr,"\nUsage:\n"); - fprintf(stderr,"\t%s [-r n] [-g n.n] filename\n",progname); - fprintf(stderr,"\nwhere:\n"); - fprintf(stderr,"\t-r n\tchoose resolution:\n"); - fprintf(stderr,"\t\t0 - 640x480x16 (default)\n"); - fprintf(stderr,"\t\t1 - 640x200x256\n"); - fprintf(stderr,"\t\t2 - 320x240x256\n"); - fprintf(stderr,"\t-g n.n\tset screen gamma (1.3 by default)\n"); - fprintf(stderr,"\n"); -} - -int -pop_up(char *title,int x, int y) -{ - VGLBitmap sav,clr; - int x1,y1,width,height,i,j; - int last_pos,cur_pos,max_item; - char buttons; - char *t; - - sav.Type=VGLDisplay->Type; - clr.Type=VGLDisplay->Type; - width=0; - height=0; - max_item=0; - i=0; - while(std_menu[i].descr!=NULL) { - height++; - max_item++; - if(strlen(std_menu[i].descr)>width) width=strlen(std_menu[i].descr); - i++; - } - width=width*8+2; - height=height*9+4+8; - sav.Xsize=width; - sav.Ysize=height; - clr.Xsize=width; - clr.Ysize=height; - sav.Bitmap=(byte *)calloc(width*height,1); - clr.Bitmap=(byte *)calloc(width*height,1); - if(x>(VGLDisplay->Xsize-width)) x1=VGLDisplay->Xsize-width; - else x1=x; - if(y>(VGLDisplay->Ysize-height)) y1=VGLDisplay->Ysize-height; - else y1=y; - VGLMouseMode(VGL_MOUSEHIDE); - VGLBitmapCopy(VGLDisplay,x1,y1,&sav,0,0,width,height); - VGLFilledBox(VGLDisplay,x1,y1,x1+width-1,y1+height-1,pal_colors-1); - VGLBitmapString(VGLDisplay,x1+1,y1+1,title,0,pal_colors-1,0,0); - VGLLine(VGLDisplay,x1,y1+9,x1+width,y1+9,0); - i=0; - while(std_menu[i].descr!=NULL) { - VGLBitmapString(VGLDisplay,x1+1,y1+11+i*9,std_menu[i].descr,0,pal_colors-1,0,0); - i++; - } - last_pos=-1; - VGLMouseMode(VGL_MOUSESHOW); - do { - pause(); - VGLMouseStatus(&x,&y,&buttons); - cur_pos=(y-y1-11)/9; - if((cur_pos<0)||(cur_pos>max_item-1)) { - if(last_pos==-1) last_pos=0; - VGLBitmapString(VGLDisplay,x1+1,y1+11+last_pos*9,std_menu[last_pos].descr,0,pal_colors-1,0,0); - last_pos=-1; - } else if(last_pos!=cur_pos) { - if(last_pos==-1) last_pos=0; - VGLBitmapString(VGLDisplay,x1+1,y1+11+last_pos*9,std_menu[last_pos].descr,0,pal_colors-1,0,0); - VGLBitmapString(VGLDisplay,x1+1,y1+11+cur_pos*9,std_menu[cur_pos].descr,pal_colors/2+1,pal_colors-1,0,0); - last_pos=cur_pos; - } - } while (buttons & MOUSE_BUTTON3DOWN); - VGLMouseMode(VGL_MOUSEHIDE); - /* XXX Screws up totally when r==3. Libvgl bug! */ - VGLBitmapCopy(&clr,0,0,VGLDisplay,x1,y1,width,height); - VGLBitmapCopy(&sav,0,0,VGLDisplay,x1,y1,width,height); - VGLMouseMode(VGL_MOUSESHOW); - free(sav.Bitmap); - free(clr.Bitmap); - changed++; - if((cur_pos>=0) && (cur_poszoom!=1 || e->rotate) { - target.Bitmap=(byte *)calloc(pic->Xsize*pic->Ysize*e->zoom*e->zoom,1); - if(e->rotate) { - target.Xsize=pic->Ysize*e->zoom; - target.Ysize=pic->Xsize*e->zoom; - } else { - target.Xsize=pic->Xsize*e->zoom; - target.Ysize=pic->Ysize*e->zoom; - } - target.Type=pic->Type; - for(x=0;xXsize;x++) { - for(y=0;yYsize;y++) { - for(i=0;izoom;i++) { - for(j=0;jzoom;j++) { - if(e->rotate) { - VGLSetXY(&target,target.Xsize-(e->zoom*y+i),e->zoom*x+j,VGLGetXY(pic,x,y)); - } else { - VGLSetXY(&target,e->zoom*x+i,e->zoom*y+j,VGLGetXY(pic,x,y)); - } - } - } - } - } - } else { - target.Bitmap=(byte *)calloc(pic->Xsize*pic->Ysize,sizeof(byte)); - target.Xsize=pic->Xsize; - target.Ysize=pic->Ysize; - target.Type=pic->Type; - VGLBitmapCopy(pic,0,0,&target,0,0,pic->Xsize,pic->Ysize); - } - } else { - target.Bitmap=(byte *)calloc(pic->Xsize*pic->Ysize,sizeof(byte)); - target.Xsize=pic->Xsize; - target.Ysize=pic->Ysize; - target.Type=pic->Type; - VGLBitmapCopy(pic,0,0,&target,0,0,pic->Xsize,pic->Ysize); - } - VGLSetPalette(red, green, blue); - if(e!=NULL) { - VGLBitmapCopy(&target,0,0,VGLDisplay,e->Xshift,e->Yshift,target.Xsize,target.Ysize); - } else { - VGLBitmapCopy(&target,0,0,VGLDisplay,0,0,target.Xsize,target.Ysize); - } - VGLMouseMode(VGL_MOUSESHOW); - free(target.Bitmap); -} - -int -png_load(char *filename) -{ - int i,j,k; - FILE *fd; - u_char header[NUMBER]; - png_structp png_ptr; - png_infop info_ptr,end_info; - png_uint_32 width,height; - int bit_depth,color_type,interlace_type; - int compression_type,filter_type; - int channels,rowbytes; - double gamma; - png_colorp palette; - int num_palette; - png_bytep *row_pointers; - char c; - int res=0; - - fd=fopen(filename,"rb"); - - if(fd==NULL) { - VGLEnd(); - perror("fopen"); - exit(1); - } - fread(header,1,NUMBER,fd); - if(!png_check_sig(header,NUMBER)) { - fprintf(stderr,"Not a PNG file.\n"); - return(-1); - } - png_ptr=png_create_read_struct(PNG_LIBPNG_VER_STRING,(void *)NULL, - NULL,NULL); - info_ptr=png_create_info_struct(png_ptr); - end_info=png_create_info_struct(png_ptr); - if(!png_ptr || !info_ptr || !end_info) { - VGLEnd(); - fprintf(stderr,"failed to allocate needed structs!\n"); - png_destroy_read_struct(&png_ptr,&info_ptr,&end_info); - return(-1); - } - png_set_sig_bytes(png_ptr,NUMBER); - png_init_io(png_ptr,fd); - png_read_info(png_ptr,info_ptr); - png_get_IHDR(png_ptr,info_ptr,&width,&height,&bit_depth, - &color_type,&interlace_type,&compression_type,&filter_type); - png_get_PLTE(png_ptr,info_ptr,&palette,&num_palette); - channels=png_get_channels(png_ptr,info_ptr); - rowbytes=png_get_rowbytes(png_ptr,info_ptr); - if(bit_depth==16) - png_set_strip_16(png_ptr); - if(color_type & PNG_COLOR_MASK_ALPHA) - png_set_strip_alpha(png_ptr); - if(png_get_gAMA(png_ptr,info_ptr,&gamma)) - png_set_gamma(png_ptr,screen_gamma,gamma); - else - png_set_gamma(png_ptr,screen_gamma,0.45); - if(res==0) { - /* Dither */ - if(color_type & PNG_COLOR_MASK_COLOR) { - if(png_get_valid(png_ptr,info_ptr,PNG_INFO_PLTE)) { - png_uint_16p histogram; - png_get_hIST(png_ptr,info_ptr,&histogram); - png_set_dither(png_ptr,palette,num_palette,max_screen_colors,histogram,0); - } else { - png_color std_color_cube[16]={ - {0x00,0x00,0x00}, - {0x02,0x02,0x02}, - {0x04,0x04,0x04}, - {0x06,0x06,0x06}, - {0x08,0x08,0x08}, - {0x0a,0x0a,0x0a}, - {0x0c,0x0c,0x0c}, - {0x0e,0x0e,0x0e}, - {0x10,0x10,0x10}, - {0x12,0x12,0x12}, - {0x14,0x14,0x14}, - {0x16,0x16,0x16}, - {0x18,0x18,0x18}, - {0x1a,0x1a,0x1a}, - {0x1d,0x1d,0x1d}, - {0xff,0xff,0xff}, - }; - png_set_dither(png_ptr,std_color_cube,max_screen_colors,max_screen_colors,NULL,0); - } - } - } - png_set_packing(png_ptr); - if(png_get_valid(png_ptr,info_ptr,PNG_INFO_sBIT)) { - png_color_8p sig_bit; - - png_get_sBIT(png_ptr,info_ptr,&sig_bit); - png_set_shift(png_ptr,sig_bit); - } - png_read_update_info(png_ptr,info_ptr); - png_get_IHDR(png_ptr,info_ptr,&width,&height,&bit_depth, - &color_type,&interlace_type,&compression_type,&filter_type); - png_get_PLTE(png_ptr,info_ptr,&palette,&num_palette); - channels=png_get_channels(png_ptr,info_ptr); - rowbytes=png_get_rowbytes(png_ptr,info_ptr); - row_pointers=malloc(height*sizeof(png_bytep)); - for(i=0;ired>>k; - pal_green[i]=(palette+i)->green>>k; - pal_blue[i]=(palette+i)->blue>>k; - } - pal_colors=num_palette; - if(pic.Bitmap!=NULL) free(pic.Bitmap); - pic.Bitmap=(byte *)calloc(rowbytes*height,sizeof(byte)); - pic.Type=MEMBUF; - pic.Xsize=rowbytes; - pic.Ysize=height; - for(i=0;iXsize-pic.Xsize)/2; - a.Yshift=(VGLDisplay->Ysize-pic.Ysize)/2; - a.rotate=0; - return(0); -} - -void -kbd_handler(int sig) -{ - u_char buf[10]; - int res; - - res=read(0,&buf,10); - changed++; - act=buf[res-1]; -} - -int -kbd_action(int x, int y, char key) -{ - changed=0; - if(key!='n') auto_chg=0; - switch(key) { - case 'q': - quit=1; - break; - case 'Z': - a.zoom++; - changed++; - break; - case 'z': - a.zoom--; - if(a.zoom<1) a.zoom=1; - changed++; - break; - case 'l': - a.Xshift+=VGLDisplay->Xsize/5; - changed++; - break; - case 'h': - a.Xshift-=VGLDisplay->Xsize/5; - changed++; - break; - case 'k': - a.Yshift+=VGLDisplay->Ysize/5; - changed++; - break; - case 'j': - a.Yshift-=VGLDisplay->Ysize/5; - changed++; - break; - case 'R': - changed++; - break; - case 'r': - if(a.rotate) a.rotate=0; - else a.rotate=1; - changed++; - break; - case '\n': - case 'n': - if(nimg>0) { - if(cur_img0) { - if(cur_img>0) { - cur_img--; - } else { - cur_img=nimg-1; - } - png_load(pres[cur_img]); - changed++; - } - break; - } - act=0; -} - -int -main(int argc, char *argv[]) -{ - int i,j,k; - char c; - int res=0; - int x,y; - char buttons; - struct termios t_new,t_old; - FILE *fsc; - - char buf[100]; - - progname=argv[0]; - screen_gamma=1.5; -#ifdef DEBUG - log=fopen("/png/view.log","w"); -#endif - while((c=getopt(argc,argv,"r:g:"))!=-1) { - switch(c) { - case 'r': - res=atoi(optarg); - if(res>0) max_screen_colors=256; - break; - case 'g': - screen_gamma=atof(optarg); - break; - case '?': - default: - usage(); - exit(0); - } - } - switch(res) { - case 0: - VGLInit(SW_CG640x480); - break; - case 1: - VGLInit(SW_VGA_CG320); - break; - case 2: - VGLInit(SW_VGA_MODEX); - break; - default: - fprintf(stderr,"No such resolution!\n"); - usage(); - exit(-1); - } -#ifdef DEBUG - fprintf(log,"VGL initialised\n"); -#endif - VGLSavePalette(); - if(argc>optind) { - res=png_load(argv[optind]); - } else { - VGLEnd(); - usage(); - exit(0); - } - if(res) { - /* Hmm... Script? */ - fsc=fopen(argv[optind],"r"); -#ifdef DEBUG - fprintf(log,"Trying script %s\n",argv[optind]); -#endif - fgets(buf,99,fsc); - buf[strlen(buf)-1]='\0'; - if(strncmp("VIEW SCRIPT",buf,11)!=NULL) { - VGLEnd(); - usage(); - } - if(strlen(buf)>12) { - auto_chg=atoi(buf+12); - } - fgets(buf,99,fsc); - buf[strlen(buf)-1]='\0'; - nimg=atoi(buf); - if(nimg==0) { - VGLEnd(); - usage(); - } - pres=(char **)calloc(nimg,sizeof(char *)); - for(i=0;iXsize*VGLDisplay->Ysize,1); - bkg.Xsize=VGLDisplay->Xsize; - bkg.Ysize=VGLDisplay->Ysize; - bkg.Type=VGLDisplay->Type; - signal(SIGIO,kbd_handler); - a.zoom=1; - a.Xshift=(VGLDisplay->Xsize-pic.Xsize)/2; - a.Yshift=(VGLDisplay->Ysize-pic.Ysize)/2; - a.rotate=0; - quit=0; - changed=0; - display(&pic,pal_red,pal_green,pal_blue,&a); - while(!quit) { - if(act) { -#ifdef DEBUG - fprintf(log,"kbd_action(%c)\n",act); -#endif - kbd_action(x,y,act); - } - if(quit) break; - if(changed) { -#ifdef DEBUG - fprintf(log,"changed, redisplaying\n"); -#endif - display(&pic,pal_red,pal_green,pal_blue,&a); - changed=0; - } - if(auto_chg) { - sleep(auto_chg); - kbd_action(x,y,'n'); - } else { - pause(); - } - VGLMouseStatus(&x,&y,&buttons); - if(buttons & MOUSE_BUTTON3DOWN) { -#ifdef DEBUG - fprintf(log,"pop_up called\n"); -#endif - pop_up("View",x,y); - } - } - VGLEnd(); -#ifdef DEBUG - fclose(log); -#endif - exit(0); -} Property changes on: head/release/picobsd/tinyware/view/view.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/view/Makefile =================================================================== --- head/release/picobsd/tinyware/view/Makefile (revision 354345) +++ head/release/picobsd/tinyware/view/Makefile (nonexistent) @@ -1,9 +0,0 @@ -# $FreeBSD$ - -PROG=view -SRCS=view.c -CFLAGS+=-I/usr/local/include -LDADD+=-L/usr/local/lib -lpng -lvgl -lz -lm -MAN= - -.include Property changes on: head/release/picobsd/tinyware/view/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/oinit/README =================================================================== --- head/release/picobsd/tinyware/oinit/README (revision 354345) +++ head/release/picobsd/tinyware/oinit/README (nonexistent) @@ -1,123 +0,0 @@ -Warsaw, 1998.07.07 - -This README shortly describes the features of "oinit" - a very simplistic -version of init(8) combined with a shell. - -Features --------- - -* oinit is able to run system in multi- and single-user modes, -* it can be started on system with DEVFS/SLICE (i.e. empty /dev), -* provides minimalistic user interface, called "shell()", -* it can run the system startup script (/etc/rc), -* it can be compiled with -DOINIT_RC to use its own startup script - (*very* primitive, but doesn't require any real shell to run it!), -* doesn't require the whole chain of init->getty->login->shell to be run, -* it is extremely small, and is ideally suited for situations when - there is little memory. - -As an additional bonus you receive some obvious and some hidden bugs... :-)) -This code is at most alpha quality yet. - - -How it works ------------- - -Unlike normal init(8), it forks itself on given number of vty's immediately -providing shell() interface. Currently it doesn't require (and is unable to -perform) any authentication, but this is easy to add if needed. - -Standard version of FreeBSD kernel looks for /sbin/init first, and then -tries to execute it. If it fails, it tries to find: - /sbin/oinit - /sbin/init.bak - /stand/sysinstall - -So it is easy to make use of it even on standard system - just put it in -/sbin/oinit and rename /sbin/init to something else, e.g. /sbin/init.bak. - -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -!!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -Init (or oinit) plays crucial role in the system. If you plan to do any -changes to your system's init, make sure you have a boot floppy with working -version of statically compiled init(8) on it - you can very easily put your -system in unusable state when fiddling with it. -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - -Shell() interface ------------------ - -It allows you to issue built-in and external commands. Built-in commands -are listed below. For each command there is short help available, with -example of usage. - - cd change working directory - pwd print working directory - set set environment variable (no expansion) - unset unset environment variable - env print all environment variables - echo echo arguments on stdout - exit exit from shell (oinit will start a new one after some delay) - . source-in a file with commands - ? help - -Any other command is passed to execvp(3) as it is. - -EXCEPTION: if you end the command line with a '&', the command is started -as daemon. This is NOT the same as in normal shell, where the '&' puts a -process in background. Here the newly started process is totally dissociated -from terminal. - -Prompt tells you: -* your `pwd` -* your PID -* and that you are root ('#'). - -WARNING: this pseudo-shell doesn't do any expansion whatsoever. - -To do list ----------- - -- oinit proper: - * fix signal handling and transitions, - * invent a one-file configuration database (combining as many files - from /etc as possible into one) able to properly handle inter- - dependencies in running various daemons, - * allow for interpreting of such database, and running various - programs ourselves (this would eventually allow to make /bin/sh - an option, not necessity), - * better hooks for incorporating other modules into oinit (see e.g. - the telnet() below), - * add optional authentication, - -- shell(): - * more built-ins: perhaps 'kill' and 'ps', - * variable expansion, - * globbing, - * conditionals, - * history? (it depends on how much memory it needs). - * programmatic hooks for easy customisation of user interface (like - hierarchy of commands and contexts), - * ... - -- implement as a routine (like shell()) a small remote login daemon telnet(), - as a built-in module to oinit. It would implement the simplest options of - normal telnet, and would itself handle authentication, passing control to - shell() on success. The authentication routine would be the same as for - checking console access. - -And allow me for a moment of day-dreaming: I'd like to rewrite oinit one day -to be a monolithic one-in-all application, non-forking but multithreaded... It -would contain all the modules, such as shell(), telnet(), ifconfig() etc... -started as threads, not separate processes. - -Credits -------- - -The overall framework was taken from FreeBSD /sbin/init. - -Andrzej Bialecki - - -$FreeBSD$ Property changes on: head/release/picobsd/tinyware/oinit/README ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/oinit/oinit.c =================================================================== --- head/release/picobsd/tinyware/oinit/oinit.c (revision 354345) +++ head/release/picobsd/tinyware/oinit/oinit.c (nonexistent) @@ -1,947 +0,0 @@ -/*- - * Copyright (c) 1998 Andrzej Bialecki - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -/* - * A primitive version of init(8) with simplistic user interface - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef USE_HISTORY -#error "Not yet. But it's quite simple to add - patches are welcome!" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define BUFSIZE 1024 -#define MAX_CONS 12 - -#define NONE 0 -#define SINGLE 1 -#define MULTI 2 -#define DEATH 3 - -#define FALSE 0 -#define TRUE 1 - -char cwd[BUFSIZE]; -char vty[]="0123456789abcdef"; -char *progname; -char *motd=NULL; -int ncons=MAX_CONS; -int Reboot=FALSE; -int transition=MULTI; -int prevtrans=SINGLE; -jmp_buf machine; - -char *trans[]={ "NONE", "SINGLE", "MULTI", "DEATH" }; - -extern char **environ; - -/* Struct for holding session state */ -struct sess { - char tty[16]; /* vty device path */ - pid_t pid; /* pid of process running on it */ - int (*func)(int argc, char **argv); - /* internal function to run on it (after forking) */ -} ttys[MAX_CONS]; - -/* Struct for built-in command */ -struct command { - char *cmd; /* command name */ - char *descr; /* command description */ - char *usage; /* usage */ - char *example; /* example of usage */ - int (*func)(char *); /* callback function */ -}; - -/* Prototypes */ -int cd(char *); -int pwd(char *); -int echo(char *); -int xit(char *); -int set(char *); -int unset(char *); -int env(char *); -int help(char *); -int sourcer(char *); -void do_command(int shell, char *cmdline); -void transition_handler(int); - -/* Table of built-in functions */ -struct command bltins[]={ - {"cd","Change working directory","cd [dir]","cd /etc",cd}, - {"pwd","Print current directory","pwd","pwd",pwd}, - {"exit","Exit from shell()","exit","exit",xit}, - {"set","Set environment variable","set [VAR=value]","set TERM=xterm",set}, - {"unset","Unset environment variable","unset VAR","unset EDITOR",unset}, - {"echo","Echo arguments on stdout","echo arg1 arg2 ...","echo Hello World!",echo}, - {"env","Print all environment variables","env","env",env}, - {".","Source-in a file with commands",". filename",". /etc/rc",sourcer}, - {"?","Print this help :-)","? [command]","? set",help}, - {NULL,NULL,NULL,NULL,NULL} -}; - -/* - * Built-in 'cd ' handler - */ -int -cd(char *path) -{ - if(chdir(path)) return(-1); - getcwd(cwd,BUFSIZE); - return(0); -} - -/* - * Built-in 'pwd' handler - */ -int -pwd(char *dummy) -{ - - if(getcwd(cwd,BUFSIZE)==NULL) return(-1); - printf("%s\n",cwd); - return(0); -} - -/* - * Built-in 'exit' handler - */ -int -xit(char *dummy) -{ - _exit(0); -} - -/* - * Built-in 'echo' handler - */ -int -echo(char *args) -{ - int i=0,j; - int len; - char c; - int s_quote=0,d_quote=0; - int sep=0,no_lf=0; - - if(args==NULL) { - printf("\n"); - return; - } - len=strlen(args); - if(len>=2) { - if(args[0]=='-' && args[1]=='n') { - no_lf++; - i=2; - while(icmd!=NULL) { - printf("%s\t%s\n",x->cmd,x->descr); - x++; - } - printf("\nEnter '? ' for details.\n\n"); - return(0); - } else { - x=bltins; - while(x->cmd!=NULL) { - if(strcmp(x->cmd,cmd)==0) { - found++; - break; - } - x++; - } - if(found) { - printf("\n%s\t%s:\n",x->cmd,x->descr); - printf("\tUsage:\n\t\t%s\n",x->usage); - printf("\te.g:\n\t\t%s\n\n",x->example); - return(0); - } else { - printf("\n%s: no such command.\n\n",cmd); - return(-1); - } - } -} - -/* - * Signal handler for shell() - */ -void -shell_sig(int sig) -{ - switch(sig) { - case SIGINT: - case SIGQUIT: - case SIGTERM: - /* ignore ? */ - break; - default: - break; - } -} - -/* - * Built-in '.' handler (read-in and execute commands from file) - */ -int -sourcer(char *fname) -{ - FILE *fd; - char buf[512],*tok,*arg,**av; - int ac,len,f,res,i; - pid_t pid; - char *sep=" \t"; - - fd=fopen(fname,"r"); - if(fd==NULL) { - printf("Couldn't open file '%s'\n",fname); - return(-1); - } - while(!feof(fd)) { - memset(buf,0,512); - if(fgets(buf,512,fd)==NULL) continue; - if((*buf=='#') || (*buf=='\n')) continue; - len=strlen(buf); - buf[len-1]='\0'; - if(strncmp(buf,"ncons",5)==0) { - tok=strtok(buf,sep); - tok=strtok(NULL,sep); - ncons=atoi(tok); - if((ncons<1)||(ncons>MAX_CONS)) { - syslog(LOG_EMERG,"%s: bad ncons value; defaulting to %d\n",fname,MAX_CONS); - ncons=MAX_CONS; - } - continue; - } else if(strncmp(buf,"motd",4)==0) { - tok=strtok(buf,sep); - motd=strdup(strtok(NULL,sep)); - continue; - } else { - do_command(0,buf); - } - /* Next command, please. */ - } - fclose(fd); - syslog(LOG_EMERG,"Done with %s",fname); -} - -void -do_command(int shell, char *cmdline) -{ - char *tok,*c,*sep=" \t"; - char **av; - struct command *x; - int found,len; - int ac,i,f,res; - int bg=0; - pid_t pid; - - len=strlen(cmdline); - if(cmdline[len-1]=='&') { - bg++; - cmdline[len-1]='\0'; - len--; - } else bg=0; - tok=strtok(cmdline,sep); - x=bltins; - found=0; - while(x->cmd!=NULL) { - if(strcmp(x->cmd,tok)==0) { - found++; - break; - } - x++; - } - if(found) { - tok=cmdline+strlen(x->cmd)+1; - while(*tok && isblank(*tok) && (tok<(cmdline+len))) tok++; - if(*tok==NULL) tok=NULL; - x->func(tok); - return; - } - ac=0; - av=(char **)calloc(((len+1)/2+1),sizeof(char *)); - av[ac++]=tok; - while((av[ac++]=strtok(NULL,sep))!=NULL) - continue; - switch((pid=fork())) { - case 0: - if(shell) { - signal(SIGINT,SIG_DFL); - signal(SIGQUIT,SIG_DFL); - signal(SIGTERM,SIG_DFL); - signal(SIGHUP,SIG_DFL); - } else { - close(0); - close(1); - close(2); - f=open(_PATH_CONSOLE,O_RDWR); - dup2(f,0); - dup2(f,1); - dup2(f,2); - if(f>2) close(f); - } - if(bg) { - if(daemon(0,0)) { - printf("do_command(%s): failed to run bg: %s\n", - av[0],strerror(errno)); - _exit(100); - } - } - execvp(av[0],av); - /* Something went wrong... */ - printf("do_command(%s): %s\n",av[0],strerror(errno)); - _exit(100); - break; - case -1: - printf("do_command(): %s\n",strerror(errno)); - break; - default: - while(waitpid(pid,&res,0)!=pid) continue; - if(WEXITSTATUS(res)) { - printf("do_command(%s): exit code=%d\n", - av[0],WEXITSTATUS(res)); - } - break; - } - free(av); - return; -} - -/* - * This is the user interface. This routine gets executed on each - * virtual console serviced by init. - * - * It works as normal shell does - for each external command it forks - * and execs, for each internal command just executes a function. - */ - -int -shell(int argc, char **argv) -{ - char buf[BUFSIZE]; - char *prompt=" # "; - int fd; - int res; - pid_t mypid; - - if(motd!=NULL) { - if((fd=open(motd,O_RDONLY))!=-1) { - do { - res=read(fd,buf,BUFSIZE); - res=write(1,buf,res); - } while(res>0); - close(fd); - } - } - - printf("\n\n+=========================================================+\n"); - printf("| Built-in shell() (enter '?' for short help on commands) |\n"); - printf("+=========================================================+\n\n"); - getcwd(cwd,BUFSIZE); - mypid=getpid(); - signal(SIGINT,shell_sig); - signal(SIGQUIT,shell_sig); - signal(SIGTERM,shell_sig); - while(!feof(stdin)) { - memset(buf,0,BUFSIZE); - printf("(%d)%s%s",mypid,cwd,prompt); - fflush(stdout); - if(fgets(buf,BUFSIZE-1,stdin)==NULL) continue; - buf[strlen(buf)-1]='\0'; - if(strlen(buf)==0) continue; - do_command(1,buf); - } - return(0); -} - -/* - * Stub for executing some external program on a console. This is called - * from previously forked copy of our process, so that exec is ok. - */ -int -external_cmd(int argc, char **argv) -{ - execvp(argv[0],argv); -} - -/* - * Acquire vty and properly attach ourselves to it. - * Also, build basic environment for running user interface. - */ - -int -start_session(int vty, int argc, char **argv) -{ - int fd; - char *t; - - close(0); - close(1); - close(2); - revoke(ttys[vty].tty); - fd=open(ttys[vty].tty,O_RDWR); - dup2(fd,0); - dup2(fd,1); - dup2(fd,2); - if(fd>2) close(fd); - login_tty(fd); - setpgid(0,getpid()); - putenv("TERM=xterm"); - putenv("HOME=/"); - putenv("PATH=/stand:/bin:/usr/bin:/sbin:."); - signal(SIGHUP,SIG_DFL); - signal(SIGINT,SIG_DFL); - signal(SIGQUIT,SIG_DFL); - signal(SIGTERM,SIG_DFL); - chdir("/"); - t=(char *)(rindex(ttys[vty].tty,'/')+1); - printf("\n\n\nStarting session on %s.\n",t); - ttys[vty].func(argc,argv); - _exit(0); -} - -/* - * Execute system startup script /etc/rc - * - * (Of course if you don't like it - I don't - you can run anything you - * want here. Perhaps it would be useful just to read some config DB and - * do these things ourselves, avoiding forking lots of shells and scripts.) - */ - -/* If OINIT_RC is defined, oinit will use it's own configuration file, - * /etc/oinit.rc. It's format is described below. Otherwise, it will use - * normal /etc/rc interpreted by Bourne shell. - */ -#ifndef OINIT_RC -#ifndef SH_NAME -#define SH_NAME "-sh" -#endif -#ifndef SH_PATH -#define SH_PATH _PATH_BSHELL -#endif -#ifndef SH_ARG -#define SH_ARG "/etc/rc" -#endif -void -runcom() -{ - char *argv[3]; - pid_t pid; - int st; - int fd; - - if((pid=fork())==0) { - /* child */ - close(0); - close(1); - close(2); - fd=open(_PATH_CONSOLE,O_RDWR); - dup2(fd,0); - dup2(fd,1); - dup2(fd,2); - if(fd>2) close(fd); - argv[0]=SH_NAME; - argv[1]=SH_ARG; - argv[2]=0; - execvp(SH_PATH,argv); - printf("runcom(): %s\n",strerror(errno)); - _exit(1); - } - /* Wait for child to exit */ - while(pid!=waitpid(pid,(int *)0,0)) continue; - return; -} -#else -/* Alternative /etc/rc - default is /etc/oinit.rc. Its format is as follows: - * - each empty line or line beginning with a '#' is discarded - * - any other line must contain a keyword, or a (nonblocking) command to run. - * - * Thus far, the following keywords are defined: - * ncons number of virtual consoles to open - * motd full path to motd file - * - * Examples of commands to run: - * - * ifconfig lo0 inet 127.0.0.1 netmask 255.0.0.0 - * ifconfig ed0 inet 148.81.168.10 netmask 255.255.255.0 - * kbdcontrol -l /usr/share/syscons/my_map.kbd - */ -void -runcom(char *fname) -{ - int fd; - - close(0); - close(1); - close(2); - fd=open(_PATH_CONSOLE,O_RDWR); - dup2(fd,0); - dup2(fd,1); - dup2(fd,2); - if(fd>2) close(fd); - sourcer(fname); -} -#endif - -int -run_multi() -{ - int i,j; - pid_t pid; - int found; - - /* Run /etc/rc if not in single user */ -#ifndef OINIT_RC - if(prevtrans==SINGLE) runcom(); -#else - if(prevtrans==SINGLE) runcom(OINIT_RC); -#endif - if(transition!=MULTI) return(-1); - - syslog(LOG_EMERG,"*** Starting multi-user mode ***"); - - /* Fork shell interface for each console */ - for(i=0;i %s\n",trans[prevtrans],trans[transition]); - if(prevtrans!=transition) longjmp(machine,sig); - break; - case SIGINT: - case SIGQUIT: - prevtrans=transition; - transition=DEATH; - syslog(LOG_EMERG,"*** Going from %s -> %s\n",trans[prevtrans],trans[transition]); - if(prevtrans!=transition) longjmp(machine,sig); - break; - default: - syslog(LOG_EMERG,"pid=%d sig=%s (ignored)\n",getpid(),sys_siglist[sig]); - break; - } -} - -/* - * Change system state appropriately to the signals - */ - -int -transition_machine() -{ - int i; - - while(transition!=DEATH) { - switch(transition) { - case MULTI: - run_multi(); - break; - case SINGLE: - run_single(); - break; - } - } - syslog(LOG_EMERG,"Killing all existing sessions..."); - /* Kill all sessions */ - kill(-1,SIGKILL); - /* Be nice and wait for them */ - while(waitpid(-1,(int *)0,WNOHANG|WUNTRACED)>0) continue; - unmount("/",0); - reboot(RB_AUTOBOOT); - /* NOTREACHED */ -} - -int -main(int argc, char **argv) -{ - int devfs=0,c,i; - - /* These are copied from real init(8) */ - if(getuid()!=0) - errx(1,"%s",strerror(EPERM)); - openlog("init",LOG_CONS|LOG_ODELAY,LOG_AUTH); - if(setsid()<0) - warn("initial setsid() failed"); - if(setlogin("root")<0) - warn("setlogin() failed"); - - close(0); - close(1); - close(2); - chdir("/"); - - progname=rindex(argv[0],'/'); - if(progname==NULL) { - progname=argv[0]; - } else progname++; - - transition=MULTI; - - /* We must recognize the same options as real init does */ - while((c=getopt(argc,argv,"dsf"))!=-1) { - switch(c) { - case 'd': - devfs=1; - break; - case 's': - transition=SINGLE; - break; - case 'f': - break; - default: - printf("%s: unrecognized flag '-%c'\n",progname,c); - break; - } - } - if(devfs) - mount("devfs",_PATH_DEV,MNT_NOEXEC|MNT_RDONLY,0); - - /* Fill in the sess structures. */ - /* XXX Really, should be filled based upon config file. */ - for(i=0;i - - Property changes on: head/release/picobsd/tinyware/oinit/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/login/README =================================================================== --- head/release/picobsd/tinyware/login/README (revision 354345) +++ head/release/picobsd/tinyware/login/README (nonexistent) @@ -1,6 +0,0 @@ -$FreeBSD$ - -This is a modified login version for PicoBSD purposes, which does -not demand PAM. -The "login.c" file is replaced by pico-login.c in this directory, -the remaining files are taken from usr.bin/login/ Property changes on: head/release/picobsd/tinyware/login/README ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/login/pico-login.c =================================================================== --- head/release/picobsd/tinyware/login/pico-login.c (revision 354345) +++ head/release/picobsd/tinyware/login/pico-login.c (nonexistent) @@ -1,1095 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-4-Clause - * - * Copyright (c) 1980, 1987, 1988, 1991, 1993, 1994 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#if 0 -static char copyright[] = -"@(#) Copyright (c) 1980, 1987, 1988, 1991, 1993, 1994\n\ - The Regents of the University of California. All rights reserved.\n"; -#endif - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)login.c 8.4 (Berkeley) 4/2/94"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -/* - * login [ name ] - * login -h hostname (for telnetd, etc.) - * login -f name (for pre-authenticated login: datakit, xterm, etc.) - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef USE_PAM -#include -#include -#include -#endif /* USE_PAM */ - -#include "pathnames.h" - -void badlogin(char *); -void checknologin(void); -void dolastlog(int); -void getloginname(void); -void motd(const char *); -int rootterm(char *); -void sigint(int); -void sleepexit(int); -void refused(char *,char *,int); -char *stypeof(char *); -void timedout(int); -int login_access(char *, char *); -void login_fbtab(char *, uid_t, gid_t); - -#ifdef USE_PAM -static int auth_pam(void); -static int export_pam_environment(void); -static int ok_to_export(const char *); - -static pam_handle_t *pamh = NULL; -static char **environ_pam; - -#define PAM_END { \ - if ((e = pam_setcred(pamh, PAM_DELETE_CRED)) != PAM_SUCCESS) \ - syslog(LOG_ERR, "pam_setcred: %s", pam_strerror(pamh, e)); \ - if ((e = pam_close_session(pamh,0)) != PAM_SUCCESS) \ - syslog(LOG_ERR, "pam_close_session: %s", pam_strerror(pamh, e)); \ - if ((e = pam_end(pamh, e)) != PAM_SUCCESS) \ - syslog(LOG_ERR, "pam_end: %s", pam_strerror(pamh, e)); \ -} -#endif - -static int auth_traditional(void); -static void usage(void); - -#define TTYGRPNAME "tty" /* name of group to own ttys */ -#define DEFAULT_BACKOFF 3 -#define DEFAULT_RETRIES 10 -#define DEFAULT_PROMPT "login: " -#define DEFAULT_PASSWD_PROMPT "Password:" - -/* - * This bounds the time given to login. Not a define so it can - * be patched on machines where it's too small. - */ -u_int timeout = 300; - -/* Buffer for signal handling of timeout */ -jmp_buf timeout_buf; - -struct passwd *pwd; -int failures; -char *term, *envinit[1], *hostname, *tty, *username; -const char *passwd_prompt, *prompt; -char full_hostname[MAXHOSTNAMELEN]; - -int -main(argc, argv) - int argc; - char *argv[]; -{ - extern char **environ; - struct group *gr; - struct stat st; - struct utmpx utmp; - int rootok, retries, backoff; - int ask, ch, cnt, fflag, hflag, pflag, quietlog, rootlogin, rval; - int changepass; - time_t now, warntime; - uid_t uid, euid; - gid_t egid; - char *p, *ttyn; - char tbuf[MAXPATHLEN + 2]; - char tname[sizeof(_PATH_TTY) + 10]; - const char *shell = NULL; - login_cap_t *lc = NULL; - int UT_HOSTSIZE = sizeof(utmp.ut_host); - int UT_NAMESIZE = sizeof(utmp.ut_user); -#ifdef USE_PAM - pid_t pid; - int e; -#endif /* USE_PAM */ - - (void)signal(SIGQUIT, SIG_IGN); - (void)signal(SIGINT, SIG_IGN); - (void)signal(SIGHUP, SIG_IGN); - if (setjmp(timeout_buf)) { - if (failures) - badlogin(tbuf); - (void)fprintf(stderr, "Login timed out after %d seconds\n", - timeout); - exit(0); - } - (void)signal(SIGALRM, timedout); - (void)alarm(timeout); - (void)setpriority(PRIO_PROCESS, 0, 0); - - openlog("login", LOG_ODELAY, LOG_AUTH); - - /* - * -p is used by getty to tell login not to destroy the environment - * -f is used to skip a second login authentication - * -h is used by other servers to pass the name of the remote - * host to login so that it may be placed in utmp and wtmp - */ - *full_hostname = '\0'; - term = NULL; - - fflag = hflag = pflag = 0; - uid = getuid(); - euid = geteuid(); - egid = getegid(); - while ((ch = getopt(argc, argv, "fh:p")) != -1) - switch (ch) { - case 'f': - fflag = 1; - break; - case 'h': - if (uid) - errx(1, "-h option: %s", strerror(EPERM)); - hflag = 1; - if (strlcpy(full_hostname, optarg, - sizeof(full_hostname)) >= sizeof(full_hostname)) - errx(1, "-h option: %s: exceeds maximum " - "hostname size", optarg); - - trimdomain(optarg, UT_HOSTSIZE); - - if (strlen(optarg) > UT_HOSTSIZE) { - struct addrinfo hints, *res; - int ga_err; - - memset(&hints, 0, sizeof(hints)); - hints.ai_family = AF_UNSPEC; - ga_err = getaddrinfo(optarg, NULL, &hints, - &res); - if (ga_err == 0) { - char hostbuf[MAXHOSTNAMELEN]; - - getnameinfo(res->ai_addr, - res->ai_addrlen, - hostbuf, - sizeof(hostbuf), NULL, 0, - NI_NUMERICHOST); - optarg = strdup(hostbuf); - if (optarg == NULL) { - syslog(LOG_NOTICE, - "strdup(): %m"); - sleepexit(1); - } - } else - optarg = "invalid hostname"; - if (res != NULL) - freeaddrinfo(res); - } - hostname = optarg; - break; - case 'p': - pflag = 1; - break; - case '?': - default: - if (!uid) - syslog(LOG_ERR, "invalid flag %c", ch); - usage(); - } - argc -= optind; - argv += optind; - - if (*argv) { - username = *argv; - ask = 0; - } else - ask = 1; - - for (cnt = getdtablesize(); cnt > 2; cnt--) - (void)close(cnt); - - ttyn = ttyname(STDIN_FILENO); - if (ttyn == NULL || *ttyn == '\0') { - (void)snprintf(tname, sizeof(tname), "%s??", _PATH_TTY); - ttyn = tname; - } - if ((tty = strrchr(ttyn, '/')) != NULL) - ++tty; - else - tty = ttyn; - - /* - * Get "login-retries" & "login-backoff" from default class - */ - lc = login_getclass(NULL); - prompt = login_getcapstr(lc, "login_prompt", - DEFAULT_PROMPT, DEFAULT_PROMPT); - passwd_prompt = login_getcapstr(lc, "passwd_prompt", - DEFAULT_PASSWD_PROMPT, DEFAULT_PASSWD_PROMPT); - retries = login_getcapnum(lc, "login-retries", DEFAULT_RETRIES, - DEFAULT_RETRIES); - backoff = login_getcapnum(lc, "login-backoff", DEFAULT_BACKOFF, - DEFAULT_BACKOFF); - login_close(lc); - lc = NULL; - - for (cnt = 0;; ask = 1) { - if (ask) { - fflag = 0; - getloginname(); - } - rootlogin = 0; - rootok = rootterm(tty); /* Default (auth may change) */ - - if (strlen(username) > UT_NAMESIZE) - username[UT_NAMESIZE] = '\0'; - - /* - * Note if trying multiple user names; log failures for - * previous user name, but don't bother logging one failure - * for nonexistent name (mistyped username). - */ - if (failures && strcmp(tbuf, username)) { - if (failures > (pwd ? 0 : 1)) - badlogin(tbuf); - } - (void)strlcpy(tbuf, username, sizeof(tbuf)); - - pwd = getpwnam(username); - - /* - * if we have a valid account name, and it doesn't have a - * password, or the -f option was specified and the caller - * is root or the caller isn't changing their uid, don't - * authenticate. - */ - if (pwd != NULL) { - if (pwd->pw_uid == 0) - rootlogin = 1; - - if (fflag && (uid == (uid_t)0 || - uid == (uid_t)pwd->pw_uid)) { - /* already authenticated */ - break; - } else if (pwd->pw_passwd[0] == '\0') { - if (!rootlogin || rootok) { - /* pretend password okay */ - rval = 0; - goto ttycheck; - } - } - } - - fflag = 0; - - (void)setpriority(PRIO_PROCESS, 0, -4); - -#ifdef USE_PAM - /* - * Try to authenticate using PAM. If a PAM system error - * occurs, perhaps because of a botched configuration, - * then fall back to using traditional Unix authentication. - */ - if ((rval = auth_pam()) == -1) -#endif /* USE_PAM */ - rval = auth_traditional(); - - (void)setpriority(PRIO_PROCESS, 0, 0); - -#ifdef USE_PAM - /* - * PAM authentication may have changed "pwd" to the - * entry for the template user. Check again to see if - * this is a root login after all. - */ - if (pwd != NULL && pwd->pw_uid == 0) - rootlogin = 1; -#endif /* USE_PAM */ - - ttycheck: - /* - * If trying to log in as root without Kerberos, - * but with insecure terminal, refuse the login attempt. - */ - if (pwd && !rval) { - if (rootlogin && !rootok) - refused(NULL, "NOROOT", 0); - else /* valid password & authenticated */ - break; - } - - (void)printf("Login incorrect\n"); - failures++; - - /* - * we allow up to 'retry' (10) tries, - * but after 'backoff' (3) we start backing off - */ - if (++cnt > backoff) { - if (cnt >= retries) { - badlogin(username); - sleepexit(1); - } - sleep((u_int)((cnt - backoff) * 5)); - } - } - - /* committed to login -- turn off timeout */ - (void)alarm((u_int)0); - (void)signal(SIGHUP, SIG_DFL); - - endpwent(); - - /* - * Establish the login class. - */ - lc = login_getpwclass(pwd); - - /* if user not super-user, check for disabled logins */ - if (!rootlogin) - auth_checknologin(lc); - - quietlog = login_getcapbool(lc, "hushlogin", 0); - /* - * Switching needed for NFS with root access disabled. - * - * XXX: This change fails to modify the additional groups for the - * process, and as such, may restrict rights normally granted - * through those groups. - */ - (void)setegid(pwd->pw_gid); - (void)seteuid(rootlogin ? 0 : pwd->pw_uid); - if (!*pwd->pw_dir || chdir(pwd->pw_dir) < 0) { - if (login_getcapbool(lc, "requirehome", 0)) - refused("Home directory not available", "HOMEDIR", 1); - if (chdir("/") < 0) - refused("Cannot find root directory", "ROOTDIR", 1); - if (!quietlog || *pwd->pw_dir) - printf("No home directory.\nLogging in with home = \"/\".\n"); - pwd->pw_dir = "/"; - } - (void)seteuid(euid); - (void)setegid(egid); - if (!quietlog) - quietlog = access(_PATH_HUSHLOGIN, F_OK) == 0; - - now = time(NULL); - -#define DEFAULT_WARN (2L * 7L * 86400L) /* Two weeks */ - - warntime = login_getcaptime(lc, "warnexpire", DEFAULT_WARN, - DEFAULT_WARN); - - if (pwd->pw_expire) { - if (now >= pwd->pw_expire) { - refused("Sorry -- your account has expired", "EXPIRED", - 1); - } else if (pwd->pw_expire - now < warntime && !quietlog) - (void)printf("Warning: your account expires on %s", - ctime(&pwd->pw_expire)); - } - - warntime = login_getcaptime(lc, "warnpassword", DEFAULT_WARN, - DEFAULT_WARN); - - changepass = 0; - if (pwd->pw_change) { - if (now >= pwd->pw_change) { - (void)printf("Sorry -- your password has expired.\n"); - changepass = 1; - syslog(LOG_INFO, "%s Password expired - forcing change", - pwd->pw_name); - } else if (pwd->pw_change - now < warntime && !quietlog) - (void)printf("Warning: your password expires on %s", - ctime(&pwd->pw_change)); - } - - if (lc != NULL) { - if (hostname) { - struct addrinfo hints, *res; - int ga_err; - - memset(&hints, 0, sizeof(hints)); - hints.ai_family = AF_UNSPEC; - ga_err = getaddrinfo(full_hostname, NULL, &hints, - &res); - if (ga_err == 0) { - char hostbuf[MAXHOSTNAMELEN]; - - getnameinfo(res->ai_addr, res->ai_addrlen, - hostbuf, sizeof(hostbuf), NULL, 0, - NI_NUMERICHOST); - if ((optarg = strdup(hostbuf)) == NULL) { - syslog(LOG_NOTICE, "strdup(): %m"); - sleepexit(1); - } - } else - optarg = NULL; - if (res != NULL) - freeaddrinfo(res); - if (!auth_hostok(lc, full_hostname, optarg)) - refused("Permission denied", "HOST", 1); - } - - if (!auth_ttyok(lc, tty)) - refused("Permission denied", "TTY", 1); - - if (!auth_timeok(lc, time(NULL))) - refused("Logins not available right now", "TIME", 1); - } - shell = login_getcapstr(lc, "shell", pwd->pw_shell, pwd->pw_shell); - if (*pwd->pw_shell == '\0') - pwd->pw_shell = _PATH_BSHELL; - if (*shell == '\0') /* Not overridden */ - shell = pwd->pw_shell; - if ((shell = strdup(shell)) == NULL) { - syslog(LOG_NOTICE, "strdup(): %m"); - sleepexit(1); - } - -#ifdef LOGIN_ACCESS - if (login_access(pwd->pw_name, hostname ? full_hostname : tty) == 0) - refused("Permission denied", "ACCESS", 1); -#endif /* LOGIN_ACCESS */ - -#if 1 - ulog_login(tty, username, hostname); -#else - /* Nothing else left to fail -- really log in. */ - memset((void *)&utmp, 0, sizeof(utmp)); - (void)gettimeofday(&utmp.ut_tv, NULL); - (void)strncpy(utmp.ut_user, username, sizeof(utmp.ut_user)); - if (hostname) - (void)strncpy(utmp.ut_host, hostname, sizeof(utmp.ut_host)); - (void)strncpy(utmp.ut_line, tty, sizeof(utmp.ut_line)); - login(&utmp); -#endif - - dolastlog(quietlog); - - /* - * Set device protections, depending on what terminal the - * user is logged in. This feature is used on Suns to give - * console users better privacy. - */ - login_fbtab(tty, pwd->pw_uid, pwd->pw_gid); - - /* - * Clear flags of the tty. None should be set, and when the - * user sets them otherwise, this can cause the chown to fail. - * Since it isn't clear that flags are useful on character - * devices, we just clear them. - */ - if (chflags(ttyn, 0) && errno != EOPNOTSUPP) - syslog(LOG_ERR, "chflags(%s): %m", ttyn); - if (chown(ttyn, pwd->pw_uid, - (gr = getgrnam(TTYGRPNAME)) ? gr->gr_gid : pwd->pw_gid)) - syslog(LOG_ERR, "chown(%s): %m", ttyn); - - - /* - * Preserve TERM if it happens to be already set. - */ - if ((term = getenv("TERM")) != NULL) { - if ((term = strdup(term)) == NULL) { - syslog(LOG_NOTICE, - "strdup(): %m"); - sleepexit(1); - } - } - - /* - * Exclude cons/vt/ptys only, assume dialup otherwise - * TODO: Make dialup tty determination a library call - * for consistency (finger etc.) - */ - if (hostname==NULL && isdialuptty(tty)) - syslog(LOG_INFO, "DIALUP %s, %s", tty, pwd->pw_name); - -#ifdef LOGALL - /* - * Syslog each successful login, so we don't have to watch hundreds - * of wtmp or lastlogin files. - */ - if (hostname) - syslog(LOG_INFO, "login from %s on %s as %s", - full_hostname, tty, pwd->pw_name); - else - syslog(LOG_INFO, "login on %s as %s", - tty, pwd->pw_name); -#endif - - /* - * If fflag is on, assume caller/authenticator has logged root login. - */ - if (rootlogin && fflag == 0) - { - if (hostname) - syslog(LOG_NOTICE, "ROOT LOGIN (%s) ON %s FROM %s", - username, tty, full_hostname); - else - syslog(LOG_NOTICE, "ROOT LOGIN (%s) ON %s", - username, tty); - } - - /* - * Destroy environment unless user has requested its preservation. - * We need to do this before setusercontext() because that may - * set or reset some environment variables. - */ - if (!pflag) - environ = envinit; - - /* - * PAM modules might add supplementary groups during pam_setcred(). - */ - if (setusercontext(lc, pwd, pwd->pw_uid, LOGIN_SETGROUP) != 0) { - syslog(LOG_ERR, "setusercontext() failed - exiting"); - exit(1); - } - -#ifdef USE_PAM - if (pamh) { - if ((e = pam_open_session(pamh, 0)) != PAM_SUCCESS) { - syslog(LOG_ERR, "pam_open_session: %s", - pam_strerror(pamh, e)); - } else if ((e = pam_setcred(pamh, PAM_ESTABLISH_CRED)) - != PAM_SUCCESS) { - syslog(LOG_ERR, "pam_setcred: %s", - pam_strerror(pamh, e)); - } - - /* - * Add any environmental variables that the - * PAM modules may have set. - * Call *after* opening session! - */ - if (pamh) { - environ_pam = pam_getenvlist(pamh); - if (environ_pam) - export_pam_environment(); - } - - /* - * We must fork() before setuid() because we need to call - * pam_close_session() as root. - */ - pid = fork(); - if (pid < 0) { - err(1, "fork"); - PAM_END; - exit(0); - } else if (pid) { - /* parent - wait for child to finish, then cleanup - session */ - wait(NULL); - PAM_END; - exit(0); - } else { - if ((e = pam_end(pamh, 0)) != PAM_SUCCESS) - syslog(LOG_ERR, "pam_end: %s", - pam_strerror(pamh, e)); - } - } -#endif /* USE_PAM */ - - /* - * We don't need to be root anymore, so - * set the user and session context - */ - if (setlogin(username) != 0) { - syslog(LOG_ERR, "setlogin(%s): %m - exiting", username); - exit(1); - } - if (setusercontext(lc, pwd, pwd->pw_uid, - LOGIN_SETALL & ~(LOGIN_SETLOGIN|LOGIN_SETGROUP)) != 0) { - syslog(LOG_ERR, "setusercontext() failed - exiting"); - exit(1); - } - - (void)setenv("SHELL", pwd->pw_shell, 1); - (void)setenv("HOME", pwd->pw_dir, 1); - if (term != NULL && *term != '\0') - (void)setenv("TERM", term, 1); /* Preset overrides */ - else { - (void)setenv("TERM", stypeof(tty), 0); /* Fallback doesn't */ - } - (void)setenv("LOGNAME", username, 1); - (void)setenv("USER", username, 1); - (void)setenv("PATH", rootlogin ? _PATH_STDPATH : _PATH_DEFPATH, 0); - - if (!quietlog) { - const char *cw; - - cw = login_getcapstr(lc, "copyright", NULL, NULL); - if (cw != NULL && access(cw, F_OK) == 0) - motd(cw); - else - (void)printf("%s\n\t%s %s\n", - "Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994", - "The Regents of the University of California. ", - "All rights reserved."); - - (void)printf("\n"); - - cw = login_getcapstr(lc, "welcome", NULL, NULL); - if (cw == NULL || access(cw, F_OK) != 0) - cw = _PATH_MOTDFILE; - motd(cw); - - cw = getenv("MAIL"); /* $MAIL may have been set by class */ - if (cw != NULL) - strlcpy(tbuf, cw, sizeof(tbuf)); - else - snprintf(tbuf, sizeof(tbuf), "%s/%s", _PATH_MAILDIR, - pwd->pw_name); - if (stat(tbuf, &st) == 0 && st.st_size != 0) - (void)printf("You have %smail.\n", - (st.st_mtime > st.st_atime) ? "new " : ""); - } - - login_close(lc); - - (void)signal(SIGALRM, SIG_DFL); - (void)signal(SIGQUIT, SIG_DFL); - (void)signal(SIGINT, SIG_DFL); - (void)signal(SIGTSTP, SIG_IGN); - - /* - * Login shells have a leading '-' in front of argv[0] - */ - if (snprintf(tbuf, sizeof(tbuf), "-%s", - (p = strrchr(pwd->pw_shell, '/')) ? p + 1 : pwd->pw_shell) >= - sizeof(tbuf)) { - syslog(LOG_ERR, "user: %s: shell exceeds maximum pathname size", - username); - errx(1, "shell exceeds maximum pathname size"); - } - - execlp(shell, tbuf, (char *)0); - err(1, "%s", shell); -} - -static int -auth_traditional() -{ - int rval; - char *p; - char *ep; - char *salt; - - rval = 1; - salt = pwd != NULL ? pwd->pw_passwd : "xx"; - - p = getpass(passwd_prompt); - ep = crypt(p, salt); - - if (pwd) { - if (!p[0] && pwd->pw_passwd[0]) - ep = ":"; - if (strcmp(ep, pwd->pw_passwd) == 0) - rval = 0; - } - - /* clear entered password */ - memset(p, 0, strlen(p)); - return rval; -} - -#ifdef USE_PAM -/* - * Attempt to authenticate the user using PAM. Returns 0 if the user is - * authenticated, or 1 if not authenticated. If some sort of PAM system - * error occurs (e.g., the "/etc/pam.conf" file is missing) then this - * function returns -1. This can be used as an indication that we should - * fall back to a different authentication mechanism. - */ -static int -auth_pam() -{ - const char *tmpl_user; - const void *item; - int rval; - int e; - static struct pam_conv conv = { openpam_ttyconv, NULL }; - - if ((e = pam_start("login", username, &conv, &pamh)) != PAM_SUCCESS) { - syslog(LOG_ERR, "pam_start: %s", pam_strerror(pamh, e)); - return -1; - } - if ((e = pam_set_item(pamh, PAM_TTY, tty)) != PAM_SUCCESS) { - syslog(LOG_ERR, "pam_set_item(PAM_TTY): %s", - pam_strerror(pamh, e)); - return -1; - } - if (hostname != NULL && - (e = pam_set_item(pamh, PAM_RHOST, full_hostname)) != PAM_SUCCESS) { - syslog(LOG_ERR, "pam_set_item(PAM_RHOST): %s", - pam_strerror(pamh, e)); - return -1; - } - e = pam_authenticate(pamh, 0); - switch (e) { - - case PAM_SUCCESS: - /* - * With PAM we support the concept of a "template" - * user. The user enters a login name which is - * authenticated by PAM, usually via a remote service - * such as RADIUS or TACACS+. If authentication - * succeeds, a different but related "template" name - * is used for setting the credentials, shell, and - * home directory. The name the user enters need only - * exist on the remote authentication server, but the - * template name must be present in the local password - * database. - * - * This is supported by two various mechanisms in the - * individual modules. However, from the application's - * point of view, the template user is always passed - * back as a changed value of the PAM_USER item. - */ - if ((e = pam_get_item(pamh, PAM_USER, &item)) == - PAM_SUCCESS) { - tmpl_user = (const char *) item; - if (strcmp(username, tmpl_user) != 0) - pwd = getpwnam(tmpl_user); - } else - syslog(LOG_ERR, "Couldn't get PAM_USER: %s", - pam_strerror(pamh, e)); - rval = 0; - break; - - case PAM_AUTH_ERR: - case PAM_USER_UNKNOWN: - case PAM_MAXTRIES: - rval = 1; - break; - - default: - syslog(LOG_ERR, "pam_authenticate: %s", pam_strerror(pamh, e)); - rval = -1; - break; - } - - if (rval == 0) { - e = pam_acct_mgmt(pamh, 0); - if (e == PAM_NEW_AUTHTOK_REQD) { - e = pam_chauthtok(pamh, PAM_CHANGE_EXPIRED_AUTHTOK); - if (e != PAM_SUCCESS) { - syslog(LOG_ERR, "pam_chauthtok: %s", - pam_strerror(pamh, e)); - rval = 1; - } - } else if (e != PAM_SUCCESS) { - rval = 1; - } - } - - if (rval != 0) { - if ((e = pam_end(pamh, e)) != PAM_SUCCESS) { - syslog(LOG_ERR, "pam_end: %s", pam_strerror(pamh, e)); - } - pamh = NULL; - } - return rval; -} - -static int -export_pam_environment() -{ - char **pp; - - for (pp = environ_pam; *pp != NULL; pp++) { - if (ok_to_export(*pp)) - (void) putenv(*pp); - free(*pp); - } - return PAM_SUCCESS; -} - -/* - * Sanity checks on PAM environmental variables: - * - Make sure there is an '=' in the string. - * - Make sure the string doesn't run on too long. - * - Do not export certain variables. This list was taken from the - * Solaris pam_putenv(3) man page. - */ -static int -ok_to_export(s) - const char *s; -{ - static const char *noexport[] = { - "SHELL", "HOME", "LOGNAME", "MAIL", "CDPATH", - "IFS", "PATH", NULL - }; - const char **pp; - size_t n; - - if (strlen(s) > 1024 || strchr(s, '=') == NULL) - return 0; - if (strncmp(s, "LD_", 3) == 0) - return 0; - for (pp = noexport; *pp != NULL; pp++) { - n = strlen(*pp); - if (s[n] == '=' && strncmp(s, *pp, n) == 0) - return 0; - } - return 1; -} -#endif /* USE_PAM */ - -static void -usage() -{ - - (void)fprintf(stderr, "usage: login [-fp] [-h hostname] [username]\n"); - exit(1); -} - -/* - * Allow for authentication style and/or kerberos instance - */ - -#define NBUFSIZ 128 // XXX was UT_NAMESIZE + 64 - -void -getloginname() -{ - int ch; - char *p; - static char nbuf[NBUFSIZ]; - - for (;;) { - (void)printf("%s", prompt); - for (p = nbuf; (ch = getchar()) != '\n'; ) { - if (ch == EOF) { - badlogin(username); - exit(0); - } - if (p < nbuf + (NBUFSIZ - 1)) - *p++ = ch; - } - if (p > nbuf) { - if (nbuf[0] == '-') - (void)fprintf(stderr, - "login names may not start with '-'.\n"); - else { - *p = '\0'; - username = nbuf; - break; - } - } - } -} - -int -rootterm(ttyn) - char *ttyn; -{ - struct ttyent *t; - - return ((t = getttynam(ttyn)) && t->ty_status & TTY_SECURE); -} - -volatile int motdinterrupt; - -void -sigint(signo) - int signo __unused; -{ - motdinterrupt = 1; -} - -void -motd(motdfile) - const char *motdfile; -{ - int fd, nchars; - sig_t oldint; - char tbuf[256]; - - if ((fd = open(motdfile, O_RDONLY, 0)) < 0) - return; - motdinterrupt = 0; - oldint = signal(SIGINT, sigint); - while ((nchars = read(fd, tbuf, sizeof(tbuf))) > 0 && !motdinterrupt) - (void)write(fileno(stdout), tbuf, nchars); - (void)signal(SIGINT, oldint); - (void)close(fd); -} - -/* ARGSUSED */ -void -timedout(signo) - int signo; -{ - - longjmp(timeout_buf, signo); -} - - -void -dolastlog(quiet) - int quiet; -{ -#if 0 /* XXX not implemented after utmp->utmpx change */ - struct lastlog ll; - int fd; - - if ((fd = open(_PATH_LASTLOG, O_RDWR, 0)) >= 0) { - (void)lseek(fd, (off_t)pwd->pw_uid * sizeof(ll), L_SET); - if (!quiet) { - if (read(fd, (char *)&ll, sizeof(ll)) == sizeof(ll) && - ll.ll_time != 0) { - (void)printf("Last login: %.*s ", - 24-5, (char *)ctime(&ll.ll_time)); - if (*ll.ll_host != '\0') - (void)printf("from %.*s\n", - (int)sizeof(ll.ll_host), - ll.ll_host); - else - (void)printf("on %.*s\n", - (int)sizeof(ll.ll_line), - ll.ll_line); - } - (void)lseek(fd, (off_t)pwd->pw_uid * sizeof(ll), L_SET); - } - memset((void *)&ll, 0, sizeof(ll)); - (void)time(&ll.ll_time); - (void)strncpy(ll.ll_line, tty, sizeof(ll.ll_line)); - if (hostname) - (void)strncpy(ll.ll_host, hostname, sizeof(ll.ll_host)); - (void)write(fd, (char *)&ll, sizeof(ll)); - (void)close(fd); - } else { - syslog(LOG_ERR, "cannot open %s: %m", _PATH_LASTLOG); - } -#endif -} - -void -badlogin(name) - char *name; -{ - - if (failures == 0) - return; - if (hostname) { - syslog(LOG_NOTICE, "%d LOGIN FAILURE%s FROM %s", - failures, failures > 1 ? "S" : "", full_hostname); - syslog(LOG_AUTHPRIV|LOG_NOTICE, - "%d LOGIN FAILURE%s FROM %s, %s", - failures, failures > 1 ? "S" : "", full_hostname, name); - } else { - syslog(LOG_NOTICE, "%d LOGIN FAILURE%s ON %s", - failures, failures > 1 ? "S" : "", tty); - syslog(LOG_AUTHPRIV|LOG_NOTICE, - "%d LOGIN FAILURE%s ON %s, %s", - failures, failures > 1 ? "S" : "", tty, name); - } - failures = 0; -} - -#undef UNKNOWN -#define UNKNOWN "su" - -char * -stypeof(ttyid) - char *ttyid; -{ - struct ttyent *t; - - if (ttyid != NULL && *ttyid != '\0') { - t = getttynam(ttyid); - if (t != NULL && t->ty_type != NULL) - return (t->ty_type); - } - return (UNKNOWN); -} - -void -refused(msg, rtype, lout) - char *msg; - char *rtype; - int lout; -{ - - if (msg != NULL) - printf("%s.\n", msg); - if (hostname) - syslog(LOG_NOTICE, "LOGIN %s REFUSED (%s) FROM %s ON TTY %s", - pwd->pw_name, rtype, full_hostname, tty); - else - syslog(LOG_NOTICE, "LOGIN %s REFUSED (%s) ON TTY %s", - pwd->pw_name, rtype, tty); - if (lout) - sleepexit(1); -} - -void -sleepexit(eval) - int eval; -{ - - (void)sleep(5); - exit(eval); -} Property changes on: head/release/picobsd/tinyware/login/pico-login.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/login/pathnames.h =================================================================== --- head/release/picobsd/tinyware/login/pathnames.h (revision 354345) +++ head/release/picobsd/tinyware/login/pathnames.h (nonexistent) @@ -1,45 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-4-Clause - * - * Copyright (c) 1989, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)pathnames.h 8.1 (Berkeley) 6/9/93 - * $FreeBSD$ - */ - -#include - -#define _PATH_HUSHLOGIN ".hushlogin" -#define _PATH_MOTDFILE "/var/run/motd" -#define _PATH_LOGACCESS "/etc/login.access" -#define _PATH_FBTAB "/etc/fbtab" -#define _PATH_LOGINDEVPERM "/etc/logindevperm" Property changes on: head/release/picobsd/tinyware/login/pathnames.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/login/Makefile =================================================================== --- head/release/picobsd/tinyware/login/Makefile (revision 354345) +++ head/release/picobsd/tinyware/login/Makefile (nonexistent) @@ -1,25 +0,0 @@ -# From: @(#)Makefile 8.1 (Berkeley) 7/19/93 -# $FreeBSD$ - -.include - -.PATH: ${.CURDIR}/../../../../usr.bin/login - -PROG= login -SRCS= pico-login.c login_fbtab.c -MAN= login.1 - -CFLAGS+=-DLOGALL - -LIBADD= util crypt - -.if ${MK_PAM_SUPPORT} != "no" -CFLAGS+= -DUSE_PAM -LIBADD+= pam -.endif - -BINOWN= root -BINMODE=4555 -PRECIOUSPROG= - -.include Property changes on: head/release/picobsd/tinyware/login/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/help/README =================================================================== --- head/release/picobsd/tinyware/help/README (revision 354345) +++ head/release/picobsd/tinyware/help/README (nonexistent) @@ -1,8 +0,0 @@ -1998.02.20 - -This is work in progress. Eventually I'll prepare the help system for newbies, -and these files are just the beginning of it... - - - -$FreeBSD$ Property changes on: head/release/picobsd/tinyware/help/README ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/help/Makefile =================================================================== --- head/release/picobsd/tinyware/help/Makefile (revision 354345) +++ head/release/picobsd/tinyware/help/Makefile (nonexistent) @@ -1,9 +0,0 @@ -# $FreeBSD$ -# -PROG=help -SRCS+=help.c -MAN= - -.include - - Property changes on: head/release/picobsd/tinyware/help/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/tinyware/help/help.c =================================================================== --- head/release/picobsd/tinyware/help/help.c (revision 354345) +++ head/release/picobsd/tinyware/help/help.c (nonexistent) @@ -1,157 +0,0 @@ -/*- - * Copyright (c) 1998 Eric P. Scott - * Copyright (c) 1998 Andrzej Bialecki - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - - -#include -#include -#include -#include - -int display(FILE *, const char *); - -static int cnt, crt=-1; - -int -main(int argc, char *argv[]) -{ - register int i, s; - FILE *fd; - struct ttysize ts; - - if (!(fd=fopen("/help.a", "r"))) { - (void)fputs("Couldn't open help archive.\n", stderr); - exit(1); - } - cnt=0; - if (ioctl(fileno(stdout), TIOCGWINSZ, &ts)>=0) { - crt=ts.ts_lines-1; - } - if (crt<3) crt=23; - s=display(fd, argc>1 ? argv[1] : "help"); - if (s<0) s=0; - else for (i=2;i9) break; - n*=10; n+=c; - } while (p<&ar.ar_size[sizeof ar.ar_size]); - if (!strncmp(ar.ar_name, aname, strlen(aname))) break; - if (fseek(fd, (long)n, SEEK_CUR)<0) return 1; - if ((n&1)&&fgetc(fd)!='\n') return 1; - } - if (cnt>=crt&&more()) return -1; - (void)fputc('\n', stdout); - cnt++; - o=0; while (o=n||(c=fgetc(fd))==EOF) break; - if (more()) return -1; - goto per; - } - if (cnt>=crt&&more()) return -1; - (void)fputc('\n', stdout); - cnt++; - if (!strcmp(fname, "help")) { - rewind(fd); - (void)fgets(aname, sizeof aname, fd); - if (cnt>=crt&&more()) return -1; - (void)fputs("The following help items are available:\n", - stdout); - cnt++; - o=0; - while (fread((void *)&ar, sizeof ar, 1, fd)==1) { - if (strncmp(ar.ar_fmag, ARFMAG, 2)) break; - if ((o%6)==0) { - (void)fputc('\n', stdout); - if (++cnt>=crt&&more()) return -1; - } - *(index(ar.ar_name,'/'))=' '; - (void)printf("%.13s", ar.ar_name); - ++o; - n=0; - p=ar.ar_size; - do { - if ((c=(int)(*p++-'0'))<0||c>9) break; - n*=10; n+=c; - } while (p<&ar.ar_size[sizeof ar.ar_size]); - if (fseek(fd, (long)n, SEEK_CUR)<0) break; - if ((n&1)&&fgetc(fd)!='\n') break; - } - if (cnt>=crt&&more()) return -1; - (void)fputc('\n', stdout); - cnt++; - } - return 0; -} Property changes on: head/release/picobsd/tinyware/help/help.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/mfs_tree/stand/update =================================================================== --- head/release/picobsd/mfs_tree/stand/update (revision 354345) +++ head/release/picobsd/mfs_tree/stand/update (nonexistent) @@ -1,50 +0,0 @@ -#!/bin/sh -# $FreeBSD$ -# script to edit and save some config file(s). -# If called with no arguments, it edits 3 files in /etc -thefiles=$* -[ -z "$thefiles" ] && \ - thefiles="/etc/rc.conf /etc/rc.firewall /etc/master.passwd" -dev=`sysctl -n machdep.guessed_bootdev` -[ -c "${dev}" ] || dev="/dev/fd0" -mount ${dev} /mnt -if [ "$?" != "0" ] ; then - echo "" - echo "Cannot mount ${dev} read-write!" - exit 1 -fi - -echo "Updating ${thefiles} on ${dev}: " - -for f in ${thefiles} ; do - case $f in - /etc ) - echo "Update all files in $f :" - srcs=`ls $f` - for i in $srcs ; do - if [ -f /mnt${f}/${i}.gz ]; then - echo -n "$i ..." - gzip < $f/$i > /mnt${f}/${i}.gz - fi - done - echo " Done." - ;; - - passwd|master.passwd) - mkdir -p /mnt/etc - ee /etc/master.passwd - pwd_mkdb /etc/master.passwd - gzip < /etc/master.passwd > /mnt/etc/master.passwd.gz - ;; - - /*) # only absolute pathnames are ok - mkdir -p /mnt/etc /mnt/root - [ -f $f ] && ee $f && gzip < $f > /mnt${f}.gz - ;; - - *) - echo "File $f not recognised, you must use an absolute pathname." - ;; - esac -done -umount /mnt Property changes on: head/release/picobsd/mfs_tree/stand/update ___________________________________________________________________ Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/mfs_tree/etc/protocols =================================================================== --- head/release/picobsd/mfs_tree/etc/protocols (revision 354345) +++ head/release/picobsd/mfs_tree/etc/protocols (nonexistent) @@ -1,14 +0,0 @@ -# $FreeBSD$ -# Internet (IP) protocols -ip 0 IP # internet protocol, pseudo protocol number -icmp 1 ICMP # internet control message protocol -igmp 2 IGMP # Internet Group Management -tcp 6 TCP # transmission control protocol -udp 17 UDP # user datagram protocol -ipv6 41 IPV6 # ipv6 -gre 47 GRE # Generic Routing Encapsulation -ah 51 AH # authentication header -ospf 89 OSPFIGP # Open Shortest Path First IGP -pim 103 PIM # Protocol Independent Multicast -vrrp 112 VRRP # Virtual Router Redundancy Protocol -pgm 113 PGM # PGM Property changes on: head/release/picobsd/mfs_tree/etc/protocols ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/mfs_tree/etc/remote =================================================================== --- head/release/picobsd/mfs_tree/etc/remote (revision 354345) +++ head/release/picobsd/mfs_tree/etc/remote (nonexistent) @@ -1,50 +0,0 @@ -# @(#)remote 5.2 (Berkeley) 6/30/90 -# $FreeBSD$ -# remote -- remote host description file -# see tip(1), remote(5) -# -# dv device to use for the tty -# el EOL marks (default is NULL) -# du make a call flag (dial up) -# pn phone numbers (@ =>'s search phones file; possibly taken from -# PHONES environment variable) -# at ACU type -# ie input EOF marks (default is NULL) -# oe output EOF string (default is NULL) -# cu call unit (default is dv) -# br baud rate (defaults to 300) -# fs frame size (default is BUFSIZ) -- used in buffering writes on -# receive operations -# tc to continue a capability - -# Systems definitions -netcom|Netcom Unix Access:\ - :pn=\@:tc=unix1200: -omen|Omen BBS:\ - :pn=\@:tc=dos1200: - -# UNIX system definitions -unix1200|1200 Baud dial-out to a UNIX system:\ - :el=^U^C^R^O^D^S^Q:ie=%$:oe=^D:tc=dial1200: -unix300|300 Baud dial-out to a UNIX system:\ - :el=^U^C^R^O^D^S^Q:ie=%$:oe=^D:tc=dial300: - -# DOS system definitions -dos1200|1200 Baud dial-out to a DOS system:\ - :el=^U^C^R^O^D^S^Q:ie=%$:oe=^Z:pa=none:tc=dial1200: - -# General dialer definitions used below -# -# COURIER switch settings: -# switch: 1 2 3 4 5 6 7 8 9 10 -# setting: D U D U D D U D U U -# Rackmount: U U D U D U D D U D -# -dial2400|2400 Baud Hayes attributes:\ - :dv=/dev/cuau0:br#2400:cu=/dev/cuau0:at=hayes:du: -dial1200|1200 Baud Hayes attributes:\ - :dv=/dev/cuau0:br#1200:cu=/dev/cuau0:at=hayes:du: - -# Hardwired line -cuau0b|cua0b:dv=/dev/cuau0:br#2400 -cuau0c|cua0c:dv=/dev/cuau0:br#9600 Property changes on: head/release/picobsd/mfs_tree/etc/remote ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/mfs_tree/etc/termcap =================================================================== --- head/release/picobsd/mfs_tree/etc/termcap (revision 354345) +++ head/release/picobsd/mfs_tree/etc/termcap (nonexistent) @@ -1,187 +0,0 @@ -# Copyright (c) 1980, 1985, 1989 The Regents of the University of California. -# All rights reserved. -# @(#)termcap.src 5.88 (Berkeley) 4/30/91 -# -# $FreeBSD$ -# -# for syscons -# common entry without semigraphics -cons25w|ansiw|ansi80x25-raw:\ - :al=\E[L:am:bs:NP:cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:co#80:\ - :dc=\E[P:dl=\E[M:do=\E[B:bt=\E[Z:ho=\E[H:ic=\E[@:li#25:cb=\E[1K:\ - :ms:nd=\E[C:pt:rs=\E[x\E[m\Ec:so=\E[7m:se=\E[m:up=\E[A:\ - :pa#64:Co#8:Sf=\E[3%dm:Sb=\E[4%dm:op=\E[37;40m:\ - :k1=\E[M:k2=\E[N:k3=\E[O:k4=\E[P:k5=\E[Q:k6=\E[R:k7=\E[S:k8=\E[T:\ - :k9=\E[U:k;=\E[V:F1=\E[W:F2=\E[X:K2=\E[E:nw=\E[E:ec=\E[%dX:\ - :kb=^H:kh=\E[H:ku=\E[A:kd=\E[B:kl=\E[D:kr=\E[C:le=^H:eo:sf=\E[S:sr=\E[T:\ - :kN=\E[G:kP=\E[I:@7=\E[F:kI=\E[L:kD=\E[K:kB=\E[Z:\ - :IC=\E[%d@:DC=\E[%dP:SF=\E[%dS:SR=\E[%dT:AL=\E[%dL:DL=\E[%dM:\ - :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:cv=\E[%i%dd:ch=\E[%i%d`:bw:\ - :mb=\E[5m:md=\E[1m:mh=\E[30;1m:mr=\E[7m:me=\E[m:bl=^G:ut:it#8: -cons25|ansis|ansi80x25:\ - :ac=l\332m\300k\277j\331u\264t\303v\301w\302q\304x\263n\305`^Da\260f\370g\361~\371.^Y-^Xh\261I^U0\333y\363z\362:\ - :tc=cons25w: -cons25-m|ansis-mono|ansi80x25-mono:\ - :pa@:Co@:Sf@:Sb@:op@:us=\E[4m:ue=\E[m:md@:mh@:tc=cons25: -cons50|ansil|ansi80x50:\ - :li#50:tc=cons25: -cons50-m|ansil-mono|ansi80x50-mono:\ - :li#50:tc=cons25-m: -# 80x25 ISO 8859-1 FreeBSD console -cons25l1|cons25-iso8859-1:\ - :ac=l\215m\216k\214j\213u\226t\225v\227w\230q\222x\231n\217o\220s\224p\221r\223`\201a\202f\207g\210~\237.^Y-^X+\253,\273I\247y\232z\233:\ - :tc=cons25w: -cons25l1-m|cons25-iso8859-1-mono:\ - :pa@:Co@:Sf@:Sb@:op@:us=\E[4m:ue=\E[m:md@:mh@:tc=cons25l1: -# 80x50 ISO 8859-1 FreeBSD console -cons50l1|cons50-iso8859-1:\ - :li#50:tc=cons25l1: -cons50l1-m|cons50-iso8859-1-mono:\ - :li#50:tc=cons25l1-m: -dosansi|ANSI.SYS standard crt|ansi:\ - :am:bs:ce=\E[K:cl=\E[2J:cm=\E[%i%d;%dH:co#80:\ - :do=\E[B:li#25:mi:nd=\E[C:\ - :se=\E[m:so=\E[7m:up=\E[A:us=\E[4m:ue=\E[m:\ - :md=\E[1m:mh=\E[m:mb=\E[5m:me=\E[m:\ - :kh=\EG:kb=^h:ku=\EH:kd=\EP:kl=\EK:kr=\EM:\ - :k1=\E;:k2=\E<:k3=\E=:k4=\E>:k5=\E?:\ - :k6=\E@:k7=\EA:k8=\EB:k9=\EC:k0=\ED: -vt200|vt220|vt220am|vt200am|dec-vt220|dec-vt200|dec vt200 series with jump scroll:\ - :@7=\E[4~:kD=\E[3~:kI=\E[2~:kN=\E[6~:kP=\E[5~:kh=\E[1~:\ - :k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:\ - :k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~:k5=\E[15~:\ - :ve=\E[?25h:vi=\E[?25l:k0@:im@:ei@:\ - :F1=\E[23~:F2=\E[24~:ic=\E[@:IC=\E[%d@:ec=\E[%dX:tc=vt102: -vt100|dec-vt100|vt100-am|vt100am|dec vt100:\ - :do=2\E[B:co#80:li#24:cl=50\E[H\E[J:sf=2*\ED:\ - :le=^H:bs:am:cm=5\E[%i%d;%dH:nd=2\E[C:up=2\E[A:\ - :ce=3\E[K:cd=50\E[J:so=2\E[7m:se=2\E[m:us=2\E[4m:ue=2\E[m:\ - :md=2\E[1m:mr=2\E[7m:mb=2\E[5m:me=2\E[m:\ - :is=\E>\E[?1;3;4;5l\E[?7;8h\E[1;24r\E[24;1H:\ - :if=/usr/share/tabset/vt100:nw=2\EE:ho=\E[H:\ - :as=2\E(0:ae=2\E(B:ac=llmmkkjjuuttvvwwqqxxnnpprr``aa:\ - :rs=\E>\E[?1;3;4;5l\E[?7;8h:ks=\E[?1h\E=:ke=\E[?1l\E>:\ - :ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:kb=\177:\ - :k0=\EOy:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\EOt:\ - :k6=\EOu:k7=\EOv:k8=\EOl:k9=\EOw:k;=\EOx:@8=\EOM:\ - :K1=\EOq:K2=\EOr:K3=\EOs:K4=\EOp:K5=\EOn:pt:sr=2*\EM:vt#3:xn:\ - :sc=2\E7:rc=2\E8:cs=5\E[%i%d;%dr:UP=2\E[%dA:DO=2\E[%dB:RI=2\E[%dC:\ - :LE=2\E[%dD:ct=2\E[3g:st=2\EH:ta=^I:ms:bl=^G:cr=^M:eo:it#8:ut:\ - :RA=\E[?7l:SA=\E[?7h: -xterm|vs100|xterm terminal emulator (X window system):\ - :li#25:\ - :kh=\EOH:@7=\EOF:kb=^H:kD=^?:\ - :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:km:\ - :is=\E>\E[?1;3;4;5l\E[?7;8h\E[1;65r\E[65;1H:\ - :rs=\E>\E[?1;3;4;5l\E[?7;8h:\ - :tc=vt220: -xterm-color|xterm-co|xterm with ANSI colors:\ - :pa#64:Co#8:AF=\E[3%dm:AB=\E[4%dm:op=\E[39;49m:tc=xterm: - - -vt100-nam|dec-vt100-nam|vt100nam|vt100 w/no am:\ - :am@:xn@:\ - :is=\E>\E[?1;3;4;5;7l\E[?8h\E[1;24r\E[24;1H:\ - :rs=\E>\E[?1;3;4;5;7l\E[?8h:\ - :tc=vt100-am: -vt100-np|dec-vt100-np|vt100 with no padding (for psl games):\ - :do=\E[B:cl=\E[H\E[J:sf=\ED:as=\E(0:ae=\E(B:\ - :cm=\E[%i%d;%dH:nd=\E[C:up=\E[A:nw=\EE:\ - :ce=\E[K:cd=\E[J:so=\E[7m:se=\E[m:us=\E[4m:ue=\E[m:\ - :md=\E[1m:mr=\E[7m:mb=\E[5m:me=\E[m:sr=\EM:\ - :sc=\E7:rc=\E8:cs=\E[%i%d;%dr:UP=\E[%dA:DO=\E[%dB:RI=\E[%dC:\ - :LE=\E[%dD:ct=\E[3g:st=\EH:tc=vt100-am: -vt100-nac|dec-vt100-nac|vt100 without pseudographics and padding:\ - :as@:ae@:ac@:tc=vt100-np: -vt102|dec-vt102-am|vt102am|vt100 w/adv. video:\ - :al=\E[L:dl=\E[M:im=\E[4h:ei=\E[4l:mi:dc=\E[P:\ - :AL=\E[%dL:DL=\E[%dM:DC=\E[%dP:tc=vt100-np: - -# Note: this entry describes the "native" -# capabilities of the PC monochrome display, without ANY emulation; most -# communications packages (but NOT PC/IX connect) do some kind of emulation. -pc|ibmpc|ibm pc PC/IX:\ - :li#24:co#80:am:bs:bw:eo:\ - :cd=\E[J:ce=\E[K:cl=\Ec:cm=\E[%i%2;%2H:do=\E[B:ho=\E[;H:\ - :nd=\E[C:up=\E[A:so=\E[7m:se=\E[0m:us=\E[4m:ue=\E[0m: -pc3mono|IBM PC 386BSD Console with monochrome monitor:\ - :so=\E[0;1r\E[m:tc=pc3: -pc3|ibmpc3|IBM PC 386BSD Console:\ - :Co#8:\ - :DO=\E[%dB:\ - :F1=\E[W:F2=\E[X:\ - :K1=\E[H:K2=\E[I:K3=\E[E:K4=\E[F:K5=\E[G:\ - :LE=\E[%dD:\ - :RI=\E[%dC:\ - :Sb=\E[1;%dx:\ - :Sf=\E[2;%dx:\ - :UP=\E[%dA:\ - :ac=l\332m\300k\277j\331u\264t\303v\301w\302q\304x\263n\305`^Da\260f\370g\361~\371.^Y-^Xh\261I^U0\333y\363z\362:\ - :am:\ - :bl=^G:\ - :bs:\ - :cb=\E[1K:\ - :cd=\E[J:\ - :ce=\E[K:\ - :cl=\E[H\E[J:\ - :cm=\E[%i%d;%dH:\ - :co#80:\ - :cr=^M:\ - :do=\E[B:\ - :ho=\E[H:\ - :is=\E[m:\ - :it#8:\ - :k;=\E[V:k1=\E[M:k2=\E[N:k3=\E[O:k4=\E[P:k5=\E[Q:k6=\E[R:k7=\E[S:k8=\E[T:k9=\E[U:\ - :kD=\177:\ - :@7=\E[F:\ - :kN=\E[G:\ - :kP=\E[I:\ - :kb=\177:\ - :kd=\E[B:\ - :kh=\E[H:\ - :kl=\E[D:\ - :kr=\E[C:\ - :ku=\E[A:\ - :le=^H:\ - :li#25:\ - :ms:\ - :nd=\E[C:\ - :op=\E[x:\ - :pa#64:\ - :rs=\E[m:\ - :se=\E[m:\ - :sf=\E[S:\ - :so=\E[7;1r\E[7m:\ - :sr=\E[T:\ - :ta=^I:\ - :te=\E[m:\ - :ti=\E[m:\ - :up=\E[A:\ - :ut: -du|dialup:\ - :tc=unknown: -dumb|un|unknown:\ - :am:co#80:do=^J: -# SC,SW names needed for screen(1) ache -SC|screen|VT 100/ANSI X3.64 virtual terminal:\ - :am:xn:ms:mi:G0:km:\ - :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:bs:bt=\E[Z:\ - :cb=\E[1K:cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:ct=\E[3g:\ - :do=^J:nd=\E[C:pt:rc=\E8:rs=\Ec:sc=\E7:st=\EH:up=\EM:\ - :le=^H:bl=^G:cr=^M:it#8:ho=\E[H:nw=\EE:ta=^I:is=\E)0:\ - :li#24:co#80:us=\E[4m:ue=\E[24m:so=\E[3m:se=\E[23m:\ - :mb=\E[5m:md=\E[1m:mr=\E[7m:me=\E[m:sr=\EM:al=\E[L:\ - :AL=\E[%dL:dl=\E[M:DL=\E[%dM:cs=\E[%i%d;%dr:dc=\E[P:\ - :DC=\E[%dP:ic=\E[@:IC=\E[%d@:\ - :ks=\E[?1h\E=:ke=\E[?1l\E>:vb=\Eg:\ - :ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:kb=^H:\ - :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:\ - :k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:F1=\E[23~:F2=\E[24~:\ - :kh=\E[1~:kI=\E[2~:kD=\E[3~:kH=\E[4~:kP=\E[5~:kN=\E[6~:\ - :eA=\E(B\E)0:as=^N:ae=^O:\ - :vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l:\ - :Co#8:pa#64:AF=\E[3%dm:AB=\E[4%dm:op=\E[39;49m:AX:\ - :ac=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++,,hhii00: -SW|screen-w|VT 100/ANSI X3.64 virtual terminal with 132 cols:\ - :co#132:tc=screen: - Property changes on: head/release/picobsd/mfs_tree/etc/termcap ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/mfs_tree/etc/login.conf =================================================================== --- head/release/picobsd/mfs_tree/etc/login.conf (revision 354345) +++ head/release/picobsd/mfs_tree/etc/login.conf (nonexistent) @@ -1,118 +0,0 @@ -# This file controls resource limits, accounting limits and -# default user environment settings. -# -# $FreeBSD$ -# - - -# Authentication methods - -auth-defaults:\ - :auth=passwd: - -auth-root-defaults:\ - :auth-login=passwd:\ - :auth-rlogin=passwd:\ - -auth-ftp-defaults:\ - :auth=passwd: - -# Example defaults -# These settings are used by login(1) by default for classless users -# Note that entries like "cputime" set both "cputime-cur" and "cputime-max" - -default:\ - :cputime=infinity:\ - :datasize-cur=22M:\ - :stacksize-cur=8M:\ - :memorylocked-cur=10M:\ - :memoryuse-cur=30M:\ - :filesize=infinity:\ - :coredumpsize=0:\ - :maxproc-cur=64:\ - :openfiles-cur=64:\ - :priority=0:\ - :requirehome@:\ - :umask=022:\ - :tc=auth-defaults: - -# standard - standard user defaults -# -standard:\ - :copyright=/etc/COPYRIGHT:\ - :welcome=/etc/motd:\ - :setenv=MAIL=/var/mail/$,BLOCKSIZE=K,EDITOR=/usr/bin/ee:\ - :path=~/bin /bin /usr/bin:\ - :nologin=/var/run/nologin:\ - :cputime=1h30m:\ - :datasize=8M:\ - :stacksize=2M:\ - :memorylocked=4M:\ - :memoryuse=8M:\ - :filesize=8M:\ - :coredumpsize=0:\ - :openfiles=24:\ - :maxproc=32:\ - :priority=0:\ - :requirehome:\ - :passwordtime=90d:\ - :umask=002:\ - :ignoretime@:\ - :tc=default: -# -# Staff users - few restrictions and allow login anytime -# -staff:\ - :ignorenologin:\ - :ignoretime:\ - :requirehome@:\ - :accounted@:\ - :path=~/bin /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin:\ - :umask=022:\ - :tc=standard: - - -# -# root - fallback for root logins -# -root:\ - :path=~/bin /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin:\ - :cputime=infinity:\ - :datasize=infinity:\ - :stacksize=infinity:\ - :memorylocked=infinity:\ - :memoryuse=infinity:\ - :filesize=infinity:\ - :coredumpsize=0:\ - :openfiles=infinity:\ - :maxproc=infinity:\ - :memoryuse-cur=32M:\ - :maxproc-cur=64:\ - :openfiles-cur=1024:\ - :priority=0:\ - :requirehome@:\ - :umask=022:\ - :tc=auth-root-defaults:\ -# -# Settings used by /etc/rc -# -daemon:\ - :coredumpsize@:\ - :coredumpsize-cur=0:\ - :datasize=infinity:\ - :datasize-cur@:\ - :maxproc=512:\ - :maxproc-cur@:\ - :memoryuse-cur=64M:\ - :memorylocked-cur=64M:\ - :openfiles=1024:\ - :openfiles-cur@:\ - :stacksize=16M:\ - :stacksize-cur@:\ - :tc=default: -# -# Polish Users Accounts. Setup proper environment variables. -# -polish:Polish Users Accounts:\ - :lang=pl_pl.ISO-8859-2:\ - :tc=default: Property changes on: head/release/picobsd/mfs_tree/etc/login.conf ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/mfs_tree/etc/disktab =================================================================== --- head/release/picobsd/mfs_tree/etc/disktab (revision 354345) +++ head/release/picobsd/mfs_tree/etc/disktab (nonexistent) @@ -1,85 +0,0 @@ -# $FreeBSD$ -# Floppy formats: -# -# To make a filesystem on a floppy: -# fdformat [-f ] fd[.] -# disklabel -B -r -w fd[.] fd -# newfs fd[.] -# -# with : -# -t 2 - two heads -# -u 9|15|18 - sectors per track -# (using the default value of 1/4096 is not much useful for floppies) -# -l 1 - interleave 1 (for most floppies) -# -i 65536 - bytes of data per i-node -# (the default -i value will render you with a floppy wasting way -# too much space in i-node areas) - -fd360:\ - :ty=floppy:se#512:nt#2:rm#300:ns#9:nc#40:\ - :pa#720:oa#0:ba#4096:fa#512:\ - :pb#720:ob#0:bb#4096:fb#512:\ - :pc#720:oc#0:bc#4096:fc#512: - -fd720:\ - :ty=floppy:se#512:nt#2:rm#300:ns#9:nc#80:\ - :pa#1440:oa#0:ba#4096:fa#512:\ - :pb#1440:ob#0:bb#4096:fb#512:\ - :pc#1440:oc#0:bc#4096:fc#512: - -fd1200|floppy5|5in|5.25in High Density Floppy:\ - :ty=floppy:se#512:nt#2:rm#360:ns#15:nc#80:\ - :pa#2400:oa#0:ba#4096:fa#512:\ - :pb#2400:ob#0:bb#4096:fb#512:\ - :pc#2400:oc#0:bc#4096:fc#512: - -fd1440|floppy|floppy3|3in|3.5in High Density Floppy:\ - :ty=floppy:se#512:nt#2:rm#300:ns#18:nc#80:\ - :pa#2880:oa#0:ba#4096:fa#512:\ - :pb#2880:ob#0:bb#4096:fb#512:\ - :pc#2880:oc#0:bc#4096:fc#512: - -fd1024|floppy0|3.5in Special Density Floppy:\ - :ty=floppy:se#512:nt#2:rm#300:ns#16:nc#64:\ - :pa#2048:oa#0:ba#4096:fa#512:\ - :pb#2048:ob#0:bb#4096:fb#512:\ - :pc#2048:oc#0:bc#4096:fc#512: - -# a == root -# b == swap -# c == d == whole disk -# e == /var -# f == scratch -# h == /usr - -cp3100new|Connor Peripherals 100MB IDE, with a different configuration:\ - :dt=ST506:ty=winchester:se#512:nt#8:ns#33:nc#766: \ - :pa#15840:oa#0:ta=4.2BSD:ba#4096:fa#512: \ - :pb#24288:ob#15840:tb=swap: \ - :pc#202224:oc#0: \ - :pd#202224:od#0: \ - :pe#15840:oe#40128:te=4.2BSD:be#4096:fe#512: \ - :pg#15840:og#55968:tg=4.2BSD:bg#4096:fg#512: \ - :ph#130416:oh#71808:th=4.2BSD:bh#4096:fh#512: - -sony650|Sony 650 MB MOD|\ - :ty=removable:dt=SCSI:se#512:nt#1:ns#31:nc#18600:ts#1:rm#4800:\ - :pc#576600:oc#0:\ - :pa#576600:oa#0:ta=4.2BSD:ba#8192:fa#1024: - -mta3230|mo230|IBM MTA-3230 230 Meg 3.5inch Magneto-Optical:\ - :ty=removeable:dt=SCSI:rm#3600:\ - :se#512:nt#64:ns#32:nc#216:sc#2048:su#444384:\ - :pa#444384:oa#0:ba#4096:fa#0:ta=4.2BSD:\ - :pc#444384:oc#0: - -minimum:ty=mfs:se#512:nt#1:rm#300:\ - :ns#2880:nc#1:\ - :pa#2880:oa#0:ba#4096:fa#512:\ - :pc#2880:oc#0:bc#4096:fc#512: - -zip100|zip 100:\ - :ty=removable:se#512:nc#96:nt#64:ns#32:\ - :pa#196608:oa#0:ba#4096:fa#512:\ - :pb#196608:ob#0:bb#4096:fb#512:\ - :pc#196608:oc#0:bc#4096:fc#512: Property changes on: head/release/picobsd/mfs_tree/etc/disktab ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/mfs_tree/etc/shells =================================================================== --- head/release/picobsd/mfs_tree/etc/shells (revision 354345) +++ head/release/picobsd/mfs_tree/etc/shells (nonexistent) @@ -1,7 +0,0 @@ -# $FreeBSD$ -# List of acceptable shells for chpass(1). -# Ftpd will not allow users to connect who are not using -# one of these shells. - -/bin/sh -/bin/csh Property changes on: head/release/picobsd/mfs_tree/etc/shells ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/mfs_tree/etc/rc =================================================================== --- head/release/picobsd/mfs_tree/etc/rc (revision 354345) +++ head/release/picobsd/mfs_tree/etc/rc (nonexistent) @@ -1,27 +0,0 @@ -#!/bin/sh -# $FreeBSD$ - -stty status '^T' -trap : 2 -trap : 3 - -HOME=/; export HOME -PATH=/bin; export PATH -dev=`sysctl -n machdep.guessed_bootdev` -[ -c "${dev}" ] || dev="/dev/fd0" - -trap "echo 'Reboot interrupted'; exit 1" 3 -set `df /`; mount -u $8 / # upgrade mount to rw -echo "Loading /etc from MFS:/fd ..." -cp -Rp /fd/* / -echo "Updating /etc from ${dev}..." -mount -o rdonly ${dev} /fd && \ -{ cd /fd; cp -Rp etc root / ; cd / ; umount /fd ; } -cd /etc -#rm files to stop overwrite warning -for i in *; do - [ -f $i.gz ] && rm $i -done -gzip -d *.gz -. /etc/rc1 -exit 0 Property changes on: head/release/picobsd/mfs_tree/etc/rc ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/mfs_tree/etc/rc.network =================================================================== --- head/release/picobsd/mfs_tree/etc/rc.network (revision 354345) +++ head/release/picobsd/mfs_tree/etc/rc.network (nonexistent) @@ -1,83 +0,0 @@ -#!/bin/sh - -# $FreeBSD$ - -network_pass1() { - echo -n 'Doing initial network setup:' - # Set the host name if it is not already set - if [ -z "`hostname -s`" ] ; then - hostname $hostname - echo ' hostname' - fi - # Set up all the network interfaces, calling startup scripts if needed - for ifn in ${network_interfaces}; do - [ -e /etc/start_if.${ifn} ] && . /etc/start_if.${ifn} - # Do the primary ifconfig if specified - eval ifconfig_args=\$ifconfig_${ifn} - [ -n "${ifconfig_args}" ] && ifconfig ${ifn} ${ifconfig_args} - # Check to see if aliases need to be added - alias=0 - while : - do - eval ifconfig_args=\$ifconfig_${ifn}_alias${alias} - if [ -n "${ifconfig_args}" ]; then - ifconfig ${ifn} ${ifconfig_args} alias - alias=$((${alias} + 1)) - else - break; - fi - done - ifconfig ${ifn} - done - # Load the filters if required - if [ -f /etc/rc.firewall -a "${firewall_enable}" = "YES" ] ; then - # Set quiet mode if requested - if [ "${firewall_quiet}" = "YES" ]; then - fwcmd="/sbin/ipfw -q" - else - fwcmd="/sbin/ipfw" - fi - $fwcmd -f flush # Flush out the list before we begin. - - . /etc/rc.firewall - echo "Firewall rules loaded." - else - echo "Warning: kernel has firewall functionality, but firewall rules weren't loaded." - echo " All ip services are ENABLED by default." - fi - # Configure routing - if [ "x$defaultrouter" != "xNO" ] ; then - static_routes="default ${static_routes}" - route_default="default ${defaultrouter}" - fi - # Set up any static routes. This should be done before router discovery. - if [ "x${static_routes}" != "x" ]; then - for i in ${static_routes}; do - eval route_args=\$route_${i} - route add ${route_args} - done - fi - echo -n 'Additional routing options:' - if [ -n "$tcp_extensions" -a "x$tcp_extensions" != "xYES" ] ; then - echo -n ' tcp_extensions=NO' - sysctl net.inet.tcp.rfc1323=0 >/dev/null 2>&1 - sysctl net.inet.tcp.rfc1644=0 >/dev/null 2>&1 - fi - if [ "X$gateway_enable" = X"YES" ]; then - echo -n ' IP_gateway=YES' - sysctl net.inet.ip.forwarding=1 >/dev/null 2>&1 - fi - if [ "X$arpproxy_all" = X"YES" ]; then - echo -n ' turning on ARP_PROXY_ALL: ' - sysctl net.link.ether.inet.proxyall=1 2>&1 - fi - echo '.' - network_pass1_done=YES # Let future generations know we made it. -} - -network_pass2() { - network_pass2_done=YES -} - -network_pass3() { - network_pass3_done=YES -} Property changes on: head/release/picobsd/mfs_tree/etc/rc.network ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/mfs_tree/etc/motd =================================================================== --- head/release/picobsd/mfs_tree/etc/motd (revision 354345) +++ head/release/picobsd/mfs_tree/etc/motd (nonexistent) @@ -1,9 +0,0 @@ -============================================================== - - )\_)\ Welcome to PicoBSD - (o,o) - __ \~/ - -->====\ - ~~ d d - -============================================================== Property changes on: head/release/picobsd/mfs_tree/etc/motd ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Index: head/release/picobsd/mfs_tree/etc/services =================================================================== --- head/release/picobsd/mfs_tree/etc/services (revision 354345) +++ head/release/picobsd/mfs_tree/etc/services (nonexistent) @@ -1,94 +0,0 @@ -echo 4/ddp -echo 7/tcp -echo 7/udp -discard 9/tcp -discard 9/udp -systat 11/tcp -systat 11/udp -daytime 13/tcp -daytime 13/udp -qotd 17/tcp -qotd 17/udp -chargen 19/tcp -chargen 19/udp -ftp-data 20/tcp -ftp-data 20/udp -ftp 21/tcp -ftp 21/udp -ssh 22/tcp -ssh 22/udp -telnet 23/tcp -telnet 23/udp -smtp 25/tcp -smtp 25/udp -time 37/tcp -time 37/udp -domain 53/tcp -domain 53/udp -tacacs-ds 65/tcp -tacacs-ds 65/udp -bootps 67/tcp -bootps 67/udp -bootpc 68/tcp -bootpc 68/udp -tftp 69/tcp -tftp 69/udp -gopher 70/tcp -gopher 70/udp -finger 79/tcp -finger 79/udp -http 80/tcp -http 80/udp -pop2 109/tcp -pop2 109/udp -pop3 110/tcp -pop3 110/udp -uucp-path 117/tcp -uucp-path 117/udp -nntp 119/tcp -nntp 119/udp -netbios-ns 137/tcp -netbios-ns 137/udp -netbios-dgm 138/tcp -netbios-dgm 138/udp -netbios-ssn 139/tcp -netbios-ssn 139/udp -imap 143/tcp -imap 143/udp -snmp 161/tcp -snmp 161/udp -snmptrap 162/tcp -snmptrap 162/udp -bgp 179/tcp -bgp 179/udp -irc 194/tcp -irc 194/udp -ipx 213/tcp -ipx 213/udp -imap3 220/tcp -imap3 220/udp -ldap 389/tcp -ldap 389/udp -netware-ip 396/tcp -netware-ip 396/udp -https 443/tcp -https 443/udp -exec 512/tcp -biff 512/udp -login 513/tcp -who 513/udp -cmd 514/tcp -syslog 514/udp -printer 515/tcp -printer 515/udp -talk 517/tcp -talk 517/udp -ntalk 518/tcp -ntalk 518/udp -timed 525/tcp -timed 525/udp -uucp 540/tcp -uucp 540/udp -uucp-rlogin 541/tcp -uucp-rlogin 541/udp -natd 8668/divert # Network Address Translation Property changes on: head/release/picobsd/mfs_tree/etc/services ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/mfs_tree/etc/gettytab =================================================================== --- head/release/picobsd/mfs_tree/etc/gettytab (revision 354345) +++ head/release/picobsd/mfs_tree/etc/gettytab (nonexistent) @@ -1,42 +0,0 @@ -# $FreeBSD$ -# from: @(#)gettytab 5.14 (Berkeley) 3/27/91 -# -default:\ - :cb:ce:ck:lc:fd#1000:cl:im=\r\nPicoBSD (%h) (%t)\r\n\r\n:sp#1200: - -# 20140527 add nc (no carrier) to the pc console entry to fix -# devices with no handshake after svn 264175 (this also affects bhyve) -P|Pc|Pc console|3wire:\ - :nc:\ - :ht:np:sp#115200: - -# Fixed speed entries -2|std.9600|9600-baud:\ - :nc:np:sp#9600: -g|std.19200|19200-baud:\ - :np:sp#19200: -std.38400|38400-baud:\ - :np:sp#38400: -std.57600|57600-baud:\ - :np:sp#57600: -std.115200|115200-baud:\ - :np:sp#115200: - -# Entry specifying explicit device settings. See termios(4) and -# /usr/include/termios.h, too. The entry forces the tty into -# CLOCAL mode (so no DCD is required), and uses Xon/Xoff flow control. -# -# cflags: CLOCAL | HUPCL | CREAD | CS8 -# oflags: OPOST | ONLCR | OXTABS -# iflags: IXOFF | IXON | ICRNL | IGNPAR -# lflags: IEXTEN | ICANON | ISIG | ECHOCTL | ECHO | ECHOK | ECHOE | ECHOKE -# -# The `0' flags don't have input enabled. The `1' flags don't echo. -# (Echoing is done inside getty itself.) -# -local.9600|CLOCAL tty @ 9600 Bd:\ - :c0#0x0000c300:c1#0x0000cb00:c2#0x0000cb00:\ - :o0#0x00000007:o1#0x00000002:o2#0x00000007:\ - :i0#0x00000704:i1#0x00000000:i2#0x00000704:\ - :l0#0x000005cf:l1#0x00000000:l2#0x000005cf:\ - :sp#9600: Property changes on: head/release/picobsd/mfs_tree/etc/gettytab ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/mfs_tree/etc/group =================================================================== --- head/release/picobsd/mfs_tree/etc/group (revision 354345) +++ head/release/picobsd/mfs_tree/etc/group (nonexistent) @@ -1,19 +0,0 @@ -wheel:*:0:root,user -daemon:*:1:daemon -kmem:*:2:root -sys:*:3:root -tty:*:4:root -operator:*:5:root -mail:*:6: -bin:*:7: -news:*:8: -man:*:9: -games:*:13: -staff:*:20:root,user -guest:*:31:root -uucp:*:66: -xten:*:67:xten -dialer:*:68: -network:*:69: -nogroup:*:65533: -nobody:*:65534: Property changes on: head/release/picobsd/mfs_tree/etc/group ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/release/picobsd/mfs_tree/etc/rc.serial =================================================================== --- head/release/picobsd/mfs_tree/etc/rc.serial (revision 354345) +++ head/release/picobsd/mfs_tree/etc/rc.serial (nonexistent) @@ -1,127 +0,0 @@ -#!/bin/sh -# $FreeBSD$ - -# Change some defaults for serial devices. -# Standard defaults are: -# dtrwait 300 drainwait 0 -# initial cflag from = cread cs8 hupcl -# initial iflag, lflag and oflag all 0 -# speed 9600 -# special chars from -# nothing locked -# except for serial consoles the initial iflag, lflag and oflag are from -# and clocal is locked on. - -default() { - # Reset everything changed by the other functions to initial defaults. - - ci=$1; shift # call in device identifier - co=$1; shift # call out device identifier - - for i in $* - do - comcontrol /dev/tty$ci$i dtrwait 300 drainwait 0 - stty 4MB. -.\" -.It Fl -objdir Ar directory -Specify a directory with the result of a previous buildworld. -This saves the need for an -.Fl Fl init -call before creating an image. -.\" -.It Fl -src Ar SRC_PATH -Use the source tree at -.Ar SRC_PATH -instead the one at -.Pa /usr/src . -This can be useful for cross-building -.Nm -images. -When using this option, you must also create and initialize the subtree at -.Ao Ar SRC_PATH Ac Ns Pa /../usr -with the correct header files, libraries, and tools (such as the -.Xr config 8 -program) that are necessary for the cross-build (see the -.Fl -init -option). -The source files are unmodified by the -.Nm -script. -However the source tree is not completely read-only, -because -.Xr config 8 -expects the kernel configuration file to be in one of -its subdirectories, and also the process of initializing the -.Pa usr -subtree touches some parts of the source tree (this is a bug -in the release build scripts which might go away with time). -.\" -.It Fl v -Make the script verbose, showing -commands to be executed and waiting for user -input before executing each of them. -Useful for debugging. -as a fully functional system. -.El -.Sh ENVIRONMENT -As a result of extreme size limitations, the -.Nm -environment differs from the normal -.Fx -in a number of ways: -.Bl -bullet -.It -There are no dynamic libraries, and there is no directory -.Pa /usr/lib . -As a result, only static executables may be executed. -.It -In order to reduce the size of the executables, all executables on a specific -floppy are joined together as a single executable built with -.Xr crunchgen 1 . -.It -Some programs are supplied in minimalistic versions, specifically -.Nm ns , -a cut-down version of -.Xr netstat 1 , -and -.Nm vm , -a cut-down version of -.Xr vmstat 8 . -.El -.Sh BUILDING PicoBSD -The -.Nm -sources reside in the hierarchy -.Pa /usr/src/release/picobsd . -In the following discussion, all relative path names are relative to this -directory. -.Pp -The supported build script is -.Pa /usr/src/release/picobsd/build/picobsd -which can be run from anywhere, and relies on the -.Xr sysutils/makefs -port to build a filesystem without requiring -.Xr mdconfig -or root privileges to mount a filesystem. -When run in interactive mode (the default without the -.Fl n -option), the script will let you configure the various parameters -used to build the PicoBSD image. -An image is configured -using the files and directories described below. -The base system contains a template, called -.Pa bridge -for historical reasons, -that can be used as a base for building various kinds -of network appliances. -.Pp -You can define your own PicoBSD configuration, by creating a directory -with a name of your choice (e.g.\& -.Pa FOO ) -which contains -some of the following files and directories. -For more -information on how to construct these files, look at one -of the standard -.Nm -configurations as a reference. -.Bl -tag -width indent -.It Pa PICOBSD -The kernel configuration file (required). -This is a mostly standard -kernel configuration file, possibly stripped down by removing -unnecessary drivers and options to reduce the kernel's size. -.Pp -To be recognised as a -.Nm -kernel config file, the file must also contain the line -beginning with -.Dq Li #PicoBSD -below, and a matching -.Dv MD_ROOT_SIZE -option: -.Bd -literal -offset indent -#marker def_sz init MFS_inodes floppy_inodes -#PicoBSD 4200 init 8192 32768 -options MD_ROOT_SIZE=4200 # same as def_sz -.Ed -.Pp -This informs the script of the size of the memory file system and -provides a few other details on how to build the image. -.It Pa crunch.conf -.Xr crunchgen 1 -configuration (required). -It contains the list of directories containing program sources, -the list of binaries to be built, and the list of libraries that -these programs use. -See the -.Xr crunchgen 1 -manpage for the exact details on the syntax of this file. -.Pp -The following issues are particularly important when dealing -with -.Nm -configurations: -.Bl -bullet -.It -We can pass build options to those makefiles which understand -that, in order to reduce the size of the programs. -This is achieved with a line of the form -.Pp -.Dl "buildopts -DNO_PAM ..." -.It -When providing the list of directories where source files are, it -is convenient to list the following entry first: -.Pp -.Dl "srcdirs /usr/src/release/picobsd/tinyware" -.Pp -so that -.Nm Ns -specific -versions of the programs will be found there. -.It -The string -.Dq Li @__CWD__@ -is replaced with the full pathname of the directory where the -.Nm -configuration resides (i.e., the one where we find -.Pa PICOBSD , crunch.conf , -and so on). -This can be useful to refer source code that resides within a -configuration, e.g.\& -.Pp -.Dl "srcdirs @__CWD__@/src" -.El -.It Pa config -Shell variables, sourced by the -.Nm -script (optional). -The most important variables here are: -.Bl -tag -width ".Va MY_DEVS" -.It Va MY_DEVS -(Not used in -.Fx 5.0 -where we have -.Xr devfs 5 ) . -Should be set to the list of devices to be created in the -.Pa /dev -directory of the image (it is really the argument passed to -.Xr MAKEDEV 8 , -so refer to that manpage for the names). -.It Va fd_size -Size (in kilobytes) of the -.Nm -image. -By default, -.Va fd_size -is set to 1440 -which produces an image suitable for a standard floppy. -.Pp -If you plan to store the image on a CDROM (e.g.\& using -the -.Dq "El Torito" -floppy emulation), you can set -.Va fd_size -equal to 2880. -If you are planning to dump the image onto a hard disk -(either in a partition or on the whole disk), you -are not restricted to one of the standard floppy sizes. -Using a large image size per se does not waste RAM at runtime, -because only the files that are actually loaded from the image -contribute to the memory usage. -.It Va import_files -Contains a list of files to be imported in the floppy tree. -Absolute names refer to the standard file system, relative -names refer to the root of the source tree being used -(i.e.\& -.Va SRC_PATH/.. ) . -You can normally use this option if you want to import -files such as shared libraries, or databases, without -having to replicate them first in your configuration -under the -.Pa floppy.tree/ -directory. -.El -.It Pa floppy.tree.exclude -List of files from the standard floppy tree which -we do not want to be copied (optional). -.It Pa floppy.tree/ -Local additions to the standard floppy tree (optional). -The content of this subtree will be copied as-is into the -floppy image. -.It Pa floppy.tree. Ns Aq Ar site-name -Same as above, but site-specific (optional). -.El -.Pp -More information on the build process can be found in the -comments in the -.Nm -script. -.Sh USING ALTERNATE SOURCE TREES -The build script can be instructed to use an alternate source tree -using the -.Fl -src Ar SRC_PATH -option. -The tree that you specify must contain full sources for the kernel -and for all programs that you want to include in your image. -As an example, to cross-build the -.Pa bridge -floppy -using RELENG_4 sources, you can do the following: -.Bd -literal -offset indent -cd -mkdir FOO -(cd FOO; cvs -d co -rRELENG_4 src) -picobsd --src FOO/src --init # this is needed only once -picobsd --src FOO/src -n -v bridge -.Ed -.Pp -If the build is successful, the directory -.Pa build_dir-bridge/ -will contain a -.Pa kernel -that can be downloaded with etherboot, a floppy image called -.Pa picobsd.bin , -plus the products of the compilation in other directories. -If you want to modify the source tree in -.Pa FOO/src , -a new image can be produced by simply running -.Pp -.Dl "picobsd --src FOO/src -n -v bridge" -.Pp -whereas if the change affects include files or libraries -you first need to update them, e.g.\& by re-running -.Pp -.Dl "picobsd --src FOO/src --init # this is needed only once" -.Pp -as you would normally do for any change of this kind. -.Sh INSTALLING PicoBSD -.Ss Floppy Install -Historically, -.Nm -is run from a floppy disk, where it can be installed with a simple -.Pp -.Dl "dd if=picobsd.bin of=/dev/rfd0" -.Pp -and the floppy is ready to boot. -.Ss Hard Disk Install -The same process can be used to store the image on a hard disk -(entire volume or one of the slices): -.Bd -literal -offset indent -dd if=picobsd.bin of=/dev/ada2 -dd if=picobsd.bin of=/dev/ada2s3 -dd if=picobsd.bin of=/dev/ada2 oseek=NN -.Ed -.Pp -The first form will install the image on the entire disk, and it -should work in the same way as for a floppy. -.Pp -The second form will install the image -on slice number 3 (which should be large enough to store the -contents of the image). -However, the process will only have success if the -partition does not contain a valid disklabel, otherwise the kernel will -likely prevent overwriting the label. -In this case you can use the -third form, replacing -.Ar NN -with the actual start of the partition -(which you can determine using -.Xr gpart 8 ) . -Note that after saving the image to the slice, it will not yet be -recognised. -You have to use the -.Xr disklabel 8 -command to properly initialize the label (do not ask why!). -One way to do this is -.Bd -literal -offset indent -disklabel -w ada0s2 auto -disklabel -e ada0s2 -.Ed -.Pp -and from the editor enter a line corresponding to the actual partition, e.g.\& -if the image has 2.88MB (5760 sectors) you need to enter the following -line for the partition: -.Pp -.Dl "a: 5760 0 4.2BSD 512 4096" -.Pp -At this point the partition is bootable. -Note that the image size can be smaller than the slice size -(indicated as partition -.Dq Li c: ) . -.Ss CDROM Install -.Nm -can produce an ISO image named picobsd.iso, -which does not use -.Dq "El Torito" -emulation, so it has no size restrictions. -Installing means just burning a media with the file. -.Ss Booting From The Network -Yet another way to use -.Nm -is to boot the image off the network. -For this purpose you should use the uncompressed kernel which is -available as a byproduct of the compilation. -Refer to the documentation -for network booting for more details, the -.Nm -kernel is bootable as a standard -.Fx -kernel. -.Sh BOOTING PicoBSD -To boot -.Nm , -insert the floppy and reset the machine. -The boot procedure is similar to the -standard -.Fx -boot. -Booting from a floppy is normally rather slow (in the order of 1-2 -minutes), things are much faster if you store your image on -a hard disk, Compact Flash, or CDROM. -.Pp -You can also use etherboot to load the preloaded, uncompressed kernel image -which is a byproduct of the -.Nm -build. -In this case -the load time is a matter of a few seconds, even on a 10Mbit/s -ethernet. -.Pp -After booting, -.Nm -loads the root file system from the memory file system, starts -.Pa /sbin/init , -and passes control to a first startup script, -.Pa /etc/rc . -The latter populates the -.Pa /etc -and -.Pa /root -directories with the default files, then tries to identify the boot -device (floppy, hard disk partition) and possibly override the contents -of the root file system with files read from the boot device. -This allows you to store local configuration on the same media. -After this phase the boot device is no longer used, unless the -user specifically does it. -.Pp -After this, control is transferred to a second script, -.Pa /etc/rc1 -(which can be overridden from the boot device). -This script tries to associate a hostname to the system by using -the MAC address of the first ethernet interface as a key, and -.Pa /etc/hosts -as a lookup table. -Then control is passed to the main user configuration script, -.Pa /etc/rc.conf , -which is supposed to override the value of a number of configuration -variables which have been pre-set in -.Pa /etc/rc.conf.defaults . -You can use the -.Va hostname -variable to create different configurations from the same file. -After taking control back, -.Pa /etc/rc1 -completes the initializations, and as part of this -it configures network interfaces and optionally calls the -firewall configuration script, -.Pa /etc/rc.firewall , -where the user can store his own firewall configuration. -.Pp -Note that by default -.Nm -runs entirely from main memory, and has no swap space, unless you -explicitly request it. -The boot device is also not used anymore after -.Pa /etc/rc1 -takes control, again, unless you explicitly request it. -.Sh CONFIGURING a PicoBSD system -The operation of a -.Nm -system can be configured through a few files which are read at boot -time, very much like a standard -.Fx -system. -There are, however, some minor differences to reduce the -number of files to store and/or customize, thus saving space. -Among the files to configure we have the following: -.Bl -tag -width indent -.It Pa /etc/hosts -Traditionally, this file contains the IP-to-hostname mappings. -In addition to this, the -.Nm -version of this file also contains -a mapping between Ethernet (MAC) addresses and hostnames, as follows: -.Bd -literal -offset indent -#ethertable start of the ethernet->hostname mapping -# mac_address hostname -# 00:12:34:56:78:9a pinco -# 12:34:56:* pallino -# * this-matches-all -.Ed -.Pp -where the line containing -.Dq Li #ethertable -marks the start of the table. -.Pp -If the MAC address is not found, the script will prompt you to -enter a hostname and IP address for the system, and this -information will be stored in the -.Pa /etc/hosts -file (in memory) so you can simply store them on disk later. -.Pp -Note that you can use wildcards in the address part, so a line -like the last one in the example will match any MAC address and -avoid the request. -.It Pa /etc/rc.conf -This file contains a number of variables which control the -operation of the system, such as interface configuration, -router setup, network service startup, etc. -For the exact list and meaning of these variables see -.Pa /etc/rc.conf.defaults . -.Pp -It is worth mentioning that some of the variables let you -overwrite the contents of some files in -.Pa /etc . -This option is available at the moment for -.Pa /etc/host.conf -and -.Pa /etc/resolv.conf , -whose contents are generally very short and suitable for this -type of updating. -In case you use these variables, remember to use newlines -as appropriate, e.g.\& -.Bd -literal -offset indent -host_conf="# this goes into /etc/host.conf -hosts -bind" -.Ed -.Pp -Although not mandatory, in this file you should only set the -variables indicated in -.Pa /etc/rc.conf.defaults , -and avoid starting services which depend on having the network running. -This can be done at a later time: if you set -.Va firewall_enable Ns = Ns Qq Li YES , -the -.Pa /etc/rc.firewall -script will be run after configuring the network interfaces, -so you can set up your firewall and safely start network services or enable -things such as routing and bridging. -.It Pa /etc/rc.firewall -This script can be used to configure the -.Xr ipfw 4 -firewall. -On entry, the -.Va fwcmd -variable is set to the pathname of the firewall command, -.Va firewall_type -contains the value set in -.Pa /etc/rc.conf , -and -.Va hostname -contains the name assigned to the host. -.El -.Pp -There is a small script called -.Nm update -which can be used to edit and/or save to disk a copy of the files -you have modified after booting. -The script takes one or more absolute pathnames, runs the -editor on the files passed as arguments, and then saves a -compressed copy of the files on the disk (mounting and -unmounting the latter around the operation). -.Pp -If invoked without arguments, -.Nm update -edits and saves -.Pa rc.conf , rc.firewall , -and -.Pa master.passwd . -.Pp -If one of the arguments is -.Pa /etc -(the directory name alone), -then the command saves to disk (without editing) -all the files in the directory for which a copy -already exists on disk (e.g.\& as a result of a previous update). -.Sh SEE ALSO -.Xr crunchgen 1 , -.Xr mdconfig 8 , -.Xr nanobsd 8 , -.Xr swapon 8 -.Sh AUTHORS -.An -nosplit -.An Andrzej Bialecki Aq Mt abial@FreeBSD.org , -with subsequent work on the scripts by -.An Luigi Rizzo Aq Mt luigi@iet.unipi.it -and others. -Man page and -.Pa Makefiles -created by -.An Greg Lehey Aq Mt grog@lemis.com . -.Sh BUGS -Documentation is still incomplete. Property changes on: head/share/man/man8/picobsd.8 ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/share/man/man8/Makefile =================================================================== --- head/share/man/man8/Makefile (revision 354345) +++ head/share/man/man8/Makefile (revision 354346) @@ -1,45 +1,44 @@ # @(#)Makefile 8.1 (Berkeley) 6/5/93 # $FreeBSD$ .include MAN= \ beinstall.8 \ crash.8 \ diskless.8 \ intro.8 \ nanobsd.8 \ - picobsd.8 \ rc.8 \ rc.sendmail.8 \ rc.subr.8 \ rescue.8 \ ${_uefi.8} \ MLINKS= \ beinstall.8 beinstall.sh.8 \ nanobsd.8 nanobsd.sh.8 \ rc.8 rc.d.8 \ rc.8 rc.firewall.8 \ rc.8 rc.local.8 \ rc.8 rc.network.8 \ rc.8 rc.pccard.8 \ rc.8 rc.resume.8 \ rc.8 rc.serial.8 \ rc.8 rc.shutdown.8 .if ${MK_NIS} != "no" MAN+= yp.8 MLINKS+=yp.8 NIS.8 \ yp.8 nis.8 \ yp.8 YP.8 .endif .if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "amd64" _uefi.8= uefi.8 MLINKS+=uefi.8 efi.8 .endif .include Index: head/share/man/man8/nanobsd.8 =================================================================== --- head/share/man/man8/nanobsd.8 (revision 354345) +++ head/share/man/man8/nanobsd.8 (revision 354346) @@ -1,355 +1,354 @@ .\" Copyright (c) 2006 Daniel Gerzo .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" $FreeBSD$ .\" .Dd May 19, 2016 .Dt NANOBSD 8 .Os .Sh NAME .Nm nanobsd.sh .Nd utility used to create a FreeBSD system image suitable for embedded applications .Sh SYNOPSIS .Nm .Op Fl bfhiKknqvwX .Op Fl c Ar config-file .Sh DESCRIPTION The .Nm utility is a script which produces a minimal implementation of .Fx (called .Nm NanoBSD ) , which typically fits on a small media such as a Compact Flash card, or other mass storage medium. It can be used to build specialized install images, designed for easy installation and maintenance. .Pp The following options are available: .Bl -tag -width ".Fl c Ar config-file" -offset indent .It Fl b Skip the build stages (both for kernel and world). .It Fl c Ar config-file Specify the configuration file to use. .It Fl f Skip the code slice extraction. .It Fl h Display usage information. .It Fl i Skip the disk image build stage. .It Fl K Skip the .Cm installkernel stage of the build. .It Fl k Skip the .Cm buildkernel stage of the build. .It Fl n Do not cleanup before each build stage. This suppresses the normal cleanup work done before the .Cm buildworld stage and adds -DNO_CLEAN to the make command line used for each build stage (world and kernel). .It Fl q Make output more quiet. .It Fl v Make output more verbose. .It Fl w Skip the .Cm buildworld stage of the build. .It Fl X Make .Cm native-xtools. .El .Pp The features of .Nm NanoBSD include: .Pp .Bl -bullet -offset indent -compact .It Ports and packages work as in .Fx . Every single application can be installed and used in a .Nm NanoBSD image, the same way as in .Fx . .It No missing functionality. If it is possible to do something with .Fx , it is possible to do the same thing with .Nm NanoBSD , unless the specific feature or features were explicitly removed from the .Nm NanoBSD image when it was created. .It Everything is read-only at run-time. It is safe to pull the power-plug. There is no necessity to run .Xr fsck 8 after a non-graceful shutdown of the system. .It Easy to build and customize. Making use of just one shell script and one configuration file it is possible to build reduced and customized images satisfying any arbitrary set of requirements. .El .Ss NanoBSD Media Layout The mass storage medium is divided into three parts by default (which are normally mounted read-only): .Pp .Bl -bullet -offset indent -compact .It Two image partitions: .Li code#1 and .Li code#2 . .It The configuration file partition, which can be mounted under the .Pa /cfg directory at run time. .El .Pp The .Pa /etc and .Pa /var directories are .Xr md 4 (malloc backed) disks. .Pp The configuration file partition persists under the .Pa /cfg directory. It contains files for .Pa /etc directory and is briefly mounted read-only right after the system boot, therefore it is required to copy modified files from .Pa /etc back to the .Pa /cfg directory if changes are expected to persist after the system restarts. .Sh BUILDING Nm NanoBSD A .Nm NanoBSD image is built using a simple .Nm shell script, which can be found in the .Pa src/tools/tools/nanobsd directory. This script creates a bootable image, which can be copied on the storage medium using the .Xr dd 1 utility. .Pp The necessary commands to build and install a .Nm NanoBSD image are: .Bd -literal -offset indent cd /usr/src/tools/tools/nanobsd sh nanobsd.sh cd /usr/obj/nanobsd.full dd if=_.disk.full of=/dev/da0 bs=64k .Ed .Sh CUSTOMIZING Nm NanoBSD This is probably the most important and most interesting feature of .Nm NanoBSD . This is also where you will be spending most of the time when developing with .Nm NanoBSD . .Pp Customization is done in two ways: .Pp .Bl -bullet -offset indent -compact .It Configuration options. .It Custom functions. .El .Pp With configuration settings, it is possible to configure options passed to both the .Cm buildworld and .Cm installworld stages of the .Nm NanoBSD build process, as well as internal options passed to the main build process of .Nm NanoBSD . Through these options it is possible to cut the system down, so it will fit on as little as 64MB. You can use the configuration options to trim down the system even more, until it will consist of just the kernel and two or three files in the userland. .Pp The configuration file consists of configuration options, which override the default values. The most important directives are: .Bl -tag -width ".Va CONF_INSTALL" -offset indent .It Va NANO_NAME Build name (used to construct the working directory names). .It Va NANO_SRC Path to the source tree used to build the image. .It Va NANO_KERNEL Name of the kernel configuration file used to build the kernel. .It Va NANO_ARCH Machine processor architecture to build. Defaults to output of .Cm uname -p . .It Va NANO_BOOT0CFG Controls the options passed to .Xr boot0cfg 8 ; these dictate .Nm boot0 Ns 's behaviour. .It Va NANO_BOOTLOADER The .Nm boot0 loader to use relative to the .Va NANO_WORLDDIR variable. This defaults to .Pa boot/boot0sio and should be overridden to .Pa boot/boot0 to provide a VGA console. .It Va CONF_BUILD Options passed to the .Cm buildworld stage of the build. .It Va CONF_INSTALL Options passed to the .Cm installworld stage of the build. .It Va CONF_WORLD Options passed to both the .Cm buildworld and .Cm installworld stages of the build. .It Va FlashDevice Defines the type of media to use. Check the .Pa FlashDevice.sub file for more details. .El .Pp For more configuration options, please check the .Nm script. .Pp To build .Nm NanoBSD image using the .Pa nanobsd.conf configuration file, use the following command: .Bd -literal -offset indent sh nanobsd.sh -c nanobsd.conf .Ed .Pp It is possible to fine-tune .Nm NanoBSD using shell functions in the configuration file. The following example illustrates the basic model of custom functions: .Bd -literal -offset indent cust_foo () ( echo "bar=topless" > \\ ${NANO_WORLDDIR}/etc/foo ) customize_cmd cust_foo .Ed .Pp There are a few pre-defined customization functions ready for use: .Bl -tag -width ".Cm cust_allow_ssh_root" -offset indent .It Cm cust_comconsole Disables .Xr getty 8 on the virtual .Xr syscons 4 or .Xr vt 4 terminals .Pq Pa /dev/ttyv* and enables the use of the first serial port as the system console. .It Cm cust_allow_ssh_root Allow root to log in via .Xr sshd 8 . .It Cm cust_install_files Installs files from the .Pa nanobsd/Files directory, which contains some useful scripts for system administration. .El .Sh FILES .Bl -tag -width ".Pa src/tools/tools/nanobsd" -compact .It Pa src/tools/tools/nanobsd Base directory of the .Nm NanoBSD build script. .El .Sh EXAMPLES Making persistent changes to .Pa /etc/resolv.conf : .Bd -literal -offset indent vi /etc/resolv.conf \&... mount /cfg cp /etc/resolv.conf /cfg umount /cfg .Ed .Pp A more useful example of a customization function is the following, which changes the default size of the .Pa /etc directory from 5MB to 30MB: .Bd -literal -offset indent cust_etc_size () ( cd ${NANO_WORLDDIR}/conf echo 30000 > default/etc/md_size ) customize_cmd cust_etc_size .Ed .Sh SEE ALSO .Xr make.conf 5 , .Xr boot 8 , -.Xr boot0cfg 8 , -.Xr picobsd 8 +.Xr boot0cfg 8 .Sh HISTORY The .Nm utility first appeared in .Fx 6.0 . .Sh AUTHORS .An -nosplit .Nm NanoBSD was developed by .An Poul-Henning Kamp Aq Mt phk@FreeBSD.org . This manual page was written by .An Daniel Gerzo Aq Mt danger@FreeBSD.org .