ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/src/client.c
(Generate patch)

Comparing ircd-hybrid/src/client.c (file contents):
Revision 64 by knight, Sun Oct 2 20:50:00 2005 UTC vs.
Revision 65 by adx, Mon Oct 3 23:33:16 2005 UTC

# Line 1442 | Line 1442 | change_local_nick(struct Client *client_
1442    /* fd_desc is long enough */
1443    fd_note(&client_p->localClient->fd, "Nick: %s", nick);
1444   }
1445 +
1446 + /* log_user_exit()
1447 + *
1448 + * inputs       - pointer to connecting client
1449 + * output       - NONE
1450 + * side effects - Current exiting client is logged to
1451 + *                either SYSLOG or to file.
1452 + */
1453 + void
1454 + log_user_exit(struct Client *source_p)
1455 + {
1456 +  time_t on_for = CurrentTime - source_p->firsttime;
1457 + #ifdef SYSLOG_USERS
1458 +  if (IsClient(source_p))
1459 +  {
1460 +    ilog(L_INFO, "%s (%3ld:%02ld:%02ld): %s!%s@%s %llu/%llu\n",
1461 +         myctime(source_p->firsttime),
1462 +          (signed long) on_for / 3600,
1463 +          (signed long) (on_for % 3600)/60,
1464 +          (signed long) on_for % 60,
1465 +          source_p->name, source_p->username, source_p->host,
1466 +          source_p->localClient->send.bytes>>10,
1467 +          source_p->localClient->recv.bytes>>10);
1468 +    }
1469 + #else
1470 +  {
1471 +    char linebuf[BUFSIZ];
1472 +
1473 +    /*
1474 +     * This conditional makes the logfile active only after
1475 +     * it's been created - thus logging can be turned off by
1476 +     * removing the file.
1477 +     * -Taner
1478 +     */
1479 +    if (IsClient(source_p))
1480 +    {
1481 +      if (user_log_fb == NULL)
1482 +      {
1483 +        if ((ConfigLoggingEntry.userlog[0] != '\0') &&
1484 +           (user_log_fb = fbopen(ConfigLoggingEntry.userlog, "r")) != NULL)
1485 +        {
1486 +          fbclose(user_log_fb);
1487 +          user_log_fb = fbopen(ConfigLoggingEntry.userlog, "a");
1488 +        }
1489 +      }
1490 +
1491 +      if (user_log_fb != NULL)
1492 +      {
1493 +        size_t nbytes = ircsprintf(linebuf,
1494 +                   "%s (%3ld:%02ld:%02ld): %s!%s@%s %llu/%llu\n",
1495 +                   myctime(source_p->firsttime),
1496 +                   (signed long) on_for / 3600,
1497 +                   (signed long) (on_for % 3600)/60,
1498 +                   (signed long) on_for % 60,
1499 +                   source_p->name, source_p->username, source_p->host,
1500 +                   source_p->localClient->send.bytes>>10,
1501 +                   source_p->localClient->recv.bytes>>10);
1502 +        fbputs(linebuf, user_log_fb, nbytes);
1503 +      }
1504 +    }
1505 +  }
1506 + #endif
1507 + }
1508 +
1509 +
1510 + /* log_oper_action()
1511 + *
1512 + * inputs       - type of oper log entry
1513 + *              - pointer to oper
1514 + *              - const char *pattern == format string
1515 + *              - var args for format string
1516 + * output       - none
1517 + * side effects - corresponding log is written to, if its present.
1518 + *
1519 + * rewritten sept 5 2005 - Dianora
1520 + */
1521 + void
1522 + log_oper_action(int log_type, const struct Client *source_p,
1523 +                const char *pattern, ...)
1524 + {
1525 +  va_list args;
1526 +  char linebuf[IRCD_BUFSIZE];
1527 +  FBFILE *log_fb;
1528 +  char *logfile;
1529 +  const char *log_message;
1530 +  size_t nbytes;
1531 +  size_t n_preamble;
1532 +  char *p;
1533 +
1534 +  switch(log_type)
1535 +  {
1536 +  case LOG_OPER_TYPE:
1537 +    logfile = ConfigLoggingEntry.operlog;
1538 +    log_message = "OPER";
1539 +    break;
1540 +  case LOG_FAILED_OPER_TYPE:
1541 +    logfile = ConfigLoggingEntry.failed_operlog;
1542 +    log_message = "FAILED OPER";
1543 +    break;
1544 +  case LOG_KLINE_TYPE:
1545 +    logfile = ConfigLoggingEntry.klinelog;
1546 +    log_message = "KLINE";
1547 +    break;
1548 +  case LOG_RKLINE_TYPE:
1549 +    logfile = ConfigLoggingEntry.klinelog;
1550 +    log_message = "RKLINE";
1551 +    break;
1552 +  case LOG_DLINE_TYPE:
1553 +    logfile = ConfigLoggingEntry.klinelog;
1554 +    log_message = "DLINE";
1555 +    break;
1556 +  case LOG_TEMP_DLINE_TYPE:
1557 +    logfile = ConfigLoggingEntry.klinelog;
1558 +    log_message = "TEMP DLINE";
1559 +    break;
1560 +  case LOG_TEMP_KLINE_TYPE:
1561 +    logfile = ConfigLoggingEntry.klinelog;
1562 +    log_message = "TEMP KLINE";
1563 +    break;
1564 +  case LOG_GLINE_TYPE:
1565 +    logfile = ConfigLoggingEntry.glinelog;
1566 +    log_message = "GLINE";
1567 +    break;
1568 +  case LOG_KILL_TYPE:
1569 +    logfile = ConfigLoggingEntry.killlog;
1570 +    log_message = "KILL";
1571 +    break;
1572 +  case LOG_IOERR_TYPE:
1573 +    logfile = ConfigLoggingEntry.ioerrlog;
1574 +    log_message = "IO ERR";
1575 +    break;
1576 +  default:
1577 +    return;
1578 +  }
1579 +
1580 +  if (*logfile == '\0')
1581 +    return;
1582 +
1583 +  p = linebuf;
1584 +  if (source_p != NULL)
1585 +  {
1586 +    n_preamble = ircsprintf(linebuf, "%s %s by (%s!%s@%s) :",
1587 +                            myctime(CurrentTime), log_message,
1588 +                            source_p->name, source_p->username, source_p->host);
1589 +
1590 +  }
1591 +  else
1592 +  {
1593 +    n_preamble = ircsprintf(linebuf, "%s %s :",
1594 +                            myctime(CurrentTime), log_message);
1595 +  }
1596 +
1597 +  p += n_preamble;
1598 +
1599 +  if ((log_fb = fbopen(logfile, "r")) != NULL)
1600 +  {
1601 +    fbclose(log_fb);
1602 +    log_fb = fbopen(logfile, "a");
1603 +    if (log_fb == NULL)
1604 +      return;
1605 +    va_start(args, pattern);
1606 +    /* XXX add check for IRCD_BUFSIZE-(n_preamble+1) < 0 ? -db */
1607 +    nbytes = vsnprintf(p, IRCD_BUFSIZE-(n_preamble+1), pattern, args);
1608 +    nbytes += n_preamble;
1609 +    va_end(args);
1610 +    fbputs(linebuf, log_fb, nbytes);
1611 +    fbclose(log_fb);
1612 +  }
1613 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines