From a54a65dfb68b41bf86c5d3e72f33beb6773c6983 Mon Sep 17 00:00:00 2001
From: Steven Hazel <sah@freehaven.net>
Date: Wed, 15 Oct 2003 07:19:38 +0000
Subject: [PATCH] - cause configure to create a tor.sh which will have
 directories set   correctly based on how configure was run

- cause tor to guess the location of torrc more intelligently

- cause cause src/config/torrc and src/conf/sample-server-torrc to be
  generated with contents that are correct for the way configure was
  run

- cause "make install" to put torrc, sample-server-torrc, and
  dirservers somewhere intelligent


svn:r587
---
 configure.in                      | 27 ++++++++++-
 src/config/Makefile.am            |  4 +-
 src/config/sample-server-torrc.in | 20 +++++++++
 src/config/torrc.in               | 12 +++++
 src/or/config.c                   |  4 +-
 tor.sh.in                         | 75 +++++++++++++++++++++++++++++++
 6 files changed, 138 insertions(+), 4 deletions(-)
 create mode 100644 src/config/sample-server-torrc.in
 create mode 100644 src/config/torrc.in
 create mode 100644 tor.sh.in

diff --git a/configure.in b/configure.in
index 78e0180733..186f80a5ec 100644
--- a/configure.in
+++ b/configure.in
@@ -159,5 +159,30 @@ AC_CHECK_SIZEOF(long)
 AC_CHECK_SIZEOF(long long)
 AC_CHECK_SIZEOF(__int64)
 
-AC_OUTPUT(Makefile src/Makefile doc/Makefile src/config/Makefile src/common/Makefile src/or/Makefile)
+# $prefix stores the value of the --prefix command line option, or
+# NONE if the option wasn't set.  In the case that it wasn't set, make
+# it be the default, so that we can use it to expand directories now.
+if test "x$prefix" = "xNONE"; then
+  prefix=$ac_default_prefix
+fi
+
+# and similarly for $exec_prefix
+if test "x$exec_prefix" = "xNONE"; then
+  exec_prefix=$prefix
+fi
+
+CONFDIR=`eval echo $sysconfdir/tor`
+AC_SUBST(CONFDIR)
+AC_DEFINE_UNQUOTED(CONFDIR,"$CONFDIR")
+AC_DEFINE([CONFDIR], [], [tor's configuration directory])
+
+BINDIR=`eval echo $bindir`
+AC_SUBST(BINDIR)
+
+LOCALSTATEDIR=`eval echo $localstatedir`
+AC_SUBST(LOCALSTATEDIR)
+
+echo "confdir: $CONFDIR"
+
+AC_OUTPUT(Makefile tor.sh src/config/torrc src/config/sample-server-torrc src/Makefile doc/Makefile src/config/Makefile src/common/Makefile src/or/Makefile)
 
diff --git a/src/config/Makefile.am b/src/config/Makefile.am
index a4401b369b..8ff9132e7d 100644
--- a/src/config/Makefile.am
+++ b/src/config/Makefile.am
@@ -1,3 +1,5 @@
+confdir = $(sysconfdir)/tor
 
-EXTRA_DIST = dirservers oprc sample-orrc
+EXTRA_DIST = dirservers
 
+conf_DATA = dirservers torrc sample-server-torrc
diff --git a/src/config/sample-server-torrc.in b/src/config/sample-server-torrc.in
new file mode 100644
index 0000000000..d0005fd81f
--- /dev/null
+++ b/src/config/sample-server-torrc.in
@@ -0,0 +1,20 @@
+# Configuration file for a typical tor node
+
+# The directory for keeping all the config/data for this node
+DataDirectory @LOCALSTATEDIR@/lib/tor
+# A unique handle for this node
+Nickname moria4
+
+# Ports for various services. Comment out or set to 0 if you're not
+# offering that service.
+ORPort 9004 # listening for cell-speaking connections
+APPort 9024 # listening for socks-speaking connections
+#DirPort 0
+
+# Leave this set, or we'll be treated like a client.
+OnionRouter 1
+
+# List of routers. Tor nodes only know about the directory servers
+# at the beginning, and from them they get a list of currently up nodes.
+RouterFile @CONFDIR@/dirservers
+
diff --git a/src/config/torrc.in b/src/config/torrc.in
new file mode 100644
index 0000000000..eabdabe2e6
--- /dev/null
+++ b/src/config/torrc.in
@@ -0,0 +1,12 @@
+# Configuration file for a typical tor client
+# (listen for applications only)
+
+# List of routers. Tor nodes only know about the directory servers
+# at the beginning, and from them they get a list of currently up nodes.
+RouterFile @CONFDIR@/dirservers
+
+# Ports for various services. Comment out if you're not running that
+# service.
+#ORPort 9001
+APPort 9050
+
diff --git a/src/or/config.c b/src/or/config.c
index ae14d3bff7..2402a64e9b 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -220,8 +220,8 @@ int getconfig(int argc, char **argv, or_options_t *options) {
   }
   if(i < argc-1) { /* we found one */
     fname = argv[i+1];
-  } else { /* didn't find one, try /etc/torrc */
-    fname = "/etc/torrc";
+  } else { /* didn't find one, try CONFDIR */
+    fname = CONFDIR "/torrc";
   }
   log(LOG_DEBUG,"Opening config file '%s'",fname);
 
diff --git a/tor.sh.in b/tor.sh.in
new file mode 100644
index 0000000000..37e338f4d2
--- /dev/null
+++ b/tor.sh.in
@@ -0,0 +1,75 @@
+#! /bin/sh
+
+TORBIN=@BINDIR@/tor
+TORPID=@LOCALSTATEDIR@/run/tor.pid
+TORLOG=@LOCALSTATEDIR@/log/tor/tor.log
+TORCONF=@CONFDIR@/torrc
+RETVAL=0
+
+case "$1" in
+
+    start)
+    if [ -f $TORPID ]; then
+        echo "tor appears to be already running (pid file exists)"
+        echo "Maybe you should run: $0 restart ?"
+        RETVAL=1
+    else 
+        echo -n "Starting tor..."
+        $TORBIN -f $TORCONF -l warning >$TORLOG 2>&1 &
+        RETVAL=$?
+        if [ $RETVAL -eq 0 ]; then
+            echo " ok"
+        else
+            echo " ERROR!"
+        fi
+    fi
+    ;;
+
+    stop)
+    if [ -f $TORPID ]; then
+        echo -n "Killing tor..."
+        kill `cat $TORPID`
+        RETVAL=$?
+        if [ $RETVAL -eq 0 ]; then
+            echo " ok"
+        else
+            echo " ERROR!"
+        fi
+    else
+        echo "Unable to kill tor: $TORPID does not exist"
+        RETVAL=1
+    fi
+    ;;
+
+    restart)
+    $0 stop
+    if [ -f $TORPID ]; then
+            rm -f $TORPID
+    fi
+    $0 start
+    ;;
+
+    status)
+    PID=`cat $TORPID 2>/dev/null`
+    if [ "$PID" != "" ]; then
+        torstat=`ps -p $PID | grep -c "^$PID"`
+        if [ $torstat ]; then
+            echo "tor is running ($PID)"
+        else
+            echo "tor is not running (looks like it crashed, look for core?  $PID)"
+        fi
+    else
+        echo "tor is not running (exited gracefully)"
+    fi
+    ;;
+
+    log)
+    cat $TORLOG
+    ;;
+    
+    *)
+    echo "Usage: $0 (start|stop|restart|status|log)"
+    exit 1
+esac
+
+exit $RETVAL
-- 
GitLab