更改Apache钩子模块的返回值

时间:2014-08-27 22:59:00

标签: c apache

我正在构建一个自定义Apache模块(一个特定的钩子),用于检查外部服务提供的自定义授权cookie,然后验证和解密cookie以获取用户信息,或者如果没有有效的重定向用户到我们的自定义登录服务。主要功能非常简单,看起来像这样:

static int verifyRequest(request_rec* req) {
  char* authCookie;

  if (!req->main) {
    authCookie = getAuthCookie(req);

    if (isValidAuthCookie(authCookie, req)) {
      /* do stuff, inject user data, etc... */
    } else {
      setLoginRedirect(req);
    }
  }  

  return OK;
}

所以我希望它返回OK如果用户被授权,然后我注入用户数据(即用户名)并做任何其他事情,然后我希望像往常一样由Apache处理请求。但是,如果用户无效,我想进行302重定向(顺便说一句,如果有更好的方法从Apache模块重定向用户,请告诉我),因为setLoginRedirect函数插入我们的登录服务的URL进入响应头的“位置”字段。如果我尝试从302块返回else,我会得到一个空的回复。如果我在函数顶部声明了一个int并将其设置为OK(或0),如果有效,则将其设置为HTTP_TEMPORARY_REDIRECT(或302else阻塞然后返回底部的int,我得到一个空响应。我也尝试在底部使用带有if语句的布尔值,并且我也尝试通过检查底部的Location值的标题来做同样的事情 - 两者都导致空响应。

知道如何根据中间的if语句更改返回值吗?

0 个答案:

没有答案