# c-cgi-book examples

このディレクトリには、本文のコード片を実際にビルドして試すためのサンプルを置いています。

## 構成

```text
examples/
  Makefile
  public/
    login.html
  sql/
    schema.sql
  src/
    cgi.c / cgi.h
    form.c / form.h
    html.c / html.h
    json.c / json.h
    session.c / session.h
    db.c / db.h
    hello.c
    form_echo.c
    dev_login.c
    diary_form.c
    diary_submit.c
    diary_list.c
    diary_api.c
```

## ビルド

ODBCを使わない基本サンプルだけをビルドします。

```bash
make core
```

ODBCを使う日記CMS/APIもビルドします。

```bash
make diary
```

`diary` ターゲットには `unixodbc-dev` が必要です。

```bash
sudo apt install unixodbc unixodbc-dev libmariadb-dev
```

## 配置例

```bash
sudo cp build/*.cgi /usr/lib/cgi-bin/
sudo cp public/login.html /var/www/html/login.html
```

セッション保存先を作成します。

```bash
sudo mkdir -p /var/lib/c-cgi-book/sessions
sudo chown www-data:www-data /var/lib/c-cgi-book/sessions
sudo chmod 700 /var/lib/c-cgi-book/sessions
```

## データベース

`sql/schema.sql` をMariaDBに投入します。

```bash
mariadb -u root -p < sql/schema.sql
```

接続文字列は環境変数 `CGI_DB_CONN` で上書きできます。

```bash
export CGI_DB_CONN='DRIVER={MariaDB};SERVER=localhost;DATABASE=sample;UID=user;PWD=pass;'
```

Apache CGI上で環境変数を渡す方法は環境により異なります。学習用の最初の確認では、`src/db.c` の既定値をローカル環境に合わせて変更しても構いません。

## 注意

`dev_login.cgi` はローカル学習用の簡易ログインです。パスワード認証を実装していません。本番公開には使わず、第8章の説明に沿ってDB上のパスワードハッシュ検証へ置き換えてください。
