| 3 | | $version_int['8.1.11'] = 801; |
|---|
| 4 | | $version_int['8.2.7'] = 802; |
|---|
| 5 | | $version_int['8.3.1'] = 803; |
|---|
| 6 | | |
|---|
| 7 | | $pgconn = pg_connect("host=localhost dbname=docspgfr user=docspgfr") |
|---|
| | 3 | |
|---|
| | 4 | function usage() { |
|---|
| | 5 | echo ' |
|---|
| | 6 | Ceci est is '.$_SERVER["argv"][0].'. |
|---|
| | 7 | |
|---|
| | 8 | Usage: |
|---|
| | 9 | '.$_SERVER["argv"][0].' [OPTIONS]... REPERTOIRE_HTML VERSION_MAJEURE |
|---|
| | 10 | |
|---|
| | 11 | Options générales : |
|---|
| | 12 | -d BASE nom de la base de données de connexion |
|---|
| | 13 | (par défaut : "'.$PGDATABASE.'") |
|---|
| | 14 | --help affiche cette aide, puis quitte |
|---|
| | 15 | |
|---|
| | 16 | Options de connexion : |
|---|
| | 17 | -h HOTE hÎte du serveur de base de données ou répertoire de la |
|---|
| | 18 | socket (par défaut : "'.$PGHOST.'") |
|---|
| | 19 | -p PORT port TCP du serveur (par défaut : "'.$PGPORT.'") |
|---|
| | 20 | -U UTILISATEUR utilisateur PostgreSQL (par défaut : "'.$PGUSER.'") |
|---|
| | 21 | -W force la demande du mot de passe |
|---|
| | 22 | '; |
|---|
| | 23 | } |
|---|
| | 24 | |
|---|
| | 25 | // Récupération des variables d'environnement |
|---|
| | 26 | $PGHOST = getenv('PGHOST'); |
|---|
| | 27 | $PGPORT = getenv('PGPORT'); |
|---|
| | 28 | |
|---|
| | 29 | $PGUSER = getenv('PGUSER'); |
|---|
| | 30 | if (strlen("$PGUSER") == 0) { |
|---|
| | 31 | $PGUSER = getenv('USER'); |
|---|
| | 32 | } |
|---|
| | 33 | |
|---|
| | 34 | $PGDATABASE = getenv('PGDATABASE'); |
|---|
| | 35 | if (strlen("$PGDATABASE") == 0) { |
|---|
| | 36 | $PGDATABASE = $PGUSER; |
|---|
| | 37 | } |
|---|
| | 38 | |
|---|
| | 39 | $PGPASSWORD = getenv('PGPASSWORD'); |
|---|
| | 40 | |
|---|
| | 41 | // Déchiffrage des options en ligne de commande |
|---|
| | 42 | for ($i = 1; $i < $_SERVER["argc"]; $i++) { |
|---|
| | 43 | switch($_SERVER["argv"][$i]) { |
|---|
| | 44 | case "-h": |
|---|
| | 45 | case "--host": |
|---|
| | 46 | $PGHOST = $_SERVER['argv'][++$i]; |
|---|
| | 47 | break; |
|---|
| | 48 | case "-p": |
|---|
| | 49 | case "--port": |
|---|
| | 50 | $PGPORT = $_SERVER['argv'][++$i]; |
|---|
| | 51 | break; |
|---|
| | 52 | case "-U": |
|---|
| | 53 | case "--user": |
|---|
| | 54 | $PGUSER = $_SERVER['argv'][++$i]; |
|---|
| | 55 | break; |
|---|
| | 56 | case "-d": |
|---|
| | 57 | case "--database": |
|---|
| | 58 | $PGDATABASE = $_SERVER['argv'][++$i]; |
|---|
| | 59 | break; |
|---|
| | 60 | case "-W": |
|---|
| | 61 | $g_passwordrequired = true; |
|---|
| | 62 | break; |
|---|
| | 63 | case "-?": |
|---|
| | 64 | case "-h": |
|---|
| | 65 | case "--help": |
|---|
| | 66 | usage(); |
|---|
| | 67 | exit; |
|---|
| | 68 | break; |
|---|
| | 69 | default: |
|---|
| | 70 | if ($i == count($_SERVER['argv']) - 2) { |
|---|
| | 71 | $dir = $_SERVER['argv'][$i]; |
|---|
| | 72 | } else if ($i == count($_SERVER['argv']) - 1) { |
|---|
| | 73 | $version = $_SERVER['argv'][$i]; |
|---|
| | 74 | switch ($version) { |
|---|
| | 75 | case '8.1': |
|---|
| | 76 | $version_int = 801; |
|---|
| | 77 | break; |
|---|
| | 78 | case '8.2': |
|---|
| | 79 | $version_int = 802; |
|---|
| | 80 | break; |
|---|
| | 81 | case '8.3': |
|---|
| | 82 | $version_int = 803; |
|---|
| | 83 | break; |
|---|
| | 84 | default: |
|---|
| | 85 | echo "Il s'agit d'une version majeure : 8.1, 8.2 ou 8.3\n"; |
|---|
| | 86 | exit; |
|---|
| | 87 | break; |
|---|
| | 88 | } |
|---|
| | 89 | } |
|---|
| | 90 | break; |
|---|
| | 91 | } |
|---|
| | 92 | } |
|---|
| | 93 | |
|---|
| | 94 | if (strlen($dir) == 0 or strlen($version) == 0) { |
|---|
| | 95 | usage(); |
|---|
| | 96 | exit; |
|---|
| | 97 | } |
|---|
| | 98 | |
|---|
| | 99 | // Vérification du mot de passe |
|---|
| | 100 | if ($g_passwordrequired and strlen($PGPASSWORD) == 0) { |
|---|
| | 101 | // On commence par la vérification de .pgpass |
|---|
| | 102 | $pgpassfilename = getenv('HOME').'/.pgpass'; |
|---|
| | 103 | if (file_exists($pgpassfilename)) { |
|---|
| | 104 | $permissions = substr(decoct(fileperms($pgpassfilename)), 3); |
|---|
| | 105 | if (!strcmp($permissions, '600')) { |
|---|
| | 106 | $pgpassfile = fopen($pgpassfilename, 'r'); |
|---|
| | 107 | $found = false; |
|---|
| | 108 | while (!$found and $line = fgets($pgpassfile)) { |
|---|
| | 109 | list($host, $port, $database, $user, $password) = split (":", trim($line), 5); |
|---|
| | 110 | if ((!strcmp($PGHOST, $host) or !strcmp('*', $host)) and |
|---|
| | 111 | (!strcmp($PGPORT, $port) or !strcmp('*', $port)) and |
|---|
| | 112 | (!strcmp($PGDATABASE, $database) or !strcmp('*', $database)) and |
|---|
| | 113 | (!strcmp($PGUSER, $user) or !strcmp('*', $user))) { |
|---|
| | 114 | $found = true; |
|---|
| | 115 | $PGPASSWORD = $password; |
|---|
| | 116 | } |
|---|
| | 117 | } |
|---|
| | 118 | } |
|---|
| | 119 | } |
|---|
| | 120 | // s'il n'y a toujours pas de mot de passe |
|---|
| | 121 | if (strlen($PGPASSWORD) == 0) { |
|---|
| | 122 | // Attention, le mot de passe apparaîtra en clair sur le terminal... |
|---|
| | 123 | // Au moins, il ne sera pas affiché avec la commande ps :-/ |
|---|
| | 124 | echo "Mot de passe : "; |
|---|
| | 125 | $stdin = fopen('php://stdin', 'r'); |
|---|
| | 126 | $PGPASSWORD = fgets(STDIN); |
|---|
| | 127 | } |
|---|
| | 128 | } |
|---|
| | 129 | |
|---|
| | 130 | // Connexion à la base de données suivant les variables d'environnement |
|---|
| | 131 | |
|---|
| | 132 | $DSN = ''; |
|---|
| | 133 | |
|---|
| | 134 | if (strlen("$PGHOST") > 0) { |
|---|
| | 135 | $DSN .= 'host='.$PGHOST.' '; |
|---|
| | 136 | } |
|---|
| | 137 | if (strlen("$PGPORT") > 0) { |
|---|
| | 138 | $DSN .= 'port='.$PGPORT.' '; |
|---|
| | 139 | } |
|---|
| | 140 | |
|---|
| | 141 | $DSN .= 'dbname='.$PGDATABASE.' '. |
|---|
| | 142 | 'user='.$PGUSER; |
|---|
| | 143 | |
|---|
| | 144 | if (strlen("$PGPASSWORD") > 0) { |
|---|
| | 145 | $DSN .= ' password='.$PGPASSWORD; |
|---|
| | 146 | } |
|---|
| | 147 | |
|---|
| | 148 | $pgconn = pg_connect($DSN) |
|---|