2006-11-29 R. Steven Rainwater * aggregator.c (aggregator_post_feed): Now handles entries that have been updated by passing them to virgule_diary_update_feed_item(). At present only Atom feeds seem to have support for updated entries. * diary.c (virgule_diary_update_feed_item): Handles the replacement of a diary entry that has been updated or changed via a syndicated feed. * diary.c (find_entry_by_feedposttime): Searches blog entries in reverse chronological order trying to find one that matches the specified feed post time. * diary.c (virgule_diary_store_feed_item): Stores the update time of entries when available. At present, only Atom feeds seem to include an entry update time tag. * diary.c (virgule_diary_entry_render): Diary update timestamp is added to syndication link when entry has been updated via a feed. * util.c (virgule_virgule_to_time_t): Converts the timestamp string format used by mod_virgule into a proper time_t value, adjusting for the server's time zone. The older virgule_iso_to_time_t was broken. This code should replace the old code in all uses eventually. * xml_util.c (virgule_xml_del_string_contents): New function that removes and frees all text and CDATA child nodes from an XML node while leaving other children untouched. 2006-11-22 R. Steven Rainwater * aggregator.c (aggregator_index_rss_20): Added support for tag as an alternate blog entry permalink when the tag is missing. * diary.c (virgule_diary_entry_render): Created a new function to render a diary entry and associated header. This combines a lot of redundant code from several functions in diary.c and site.c, making it easier to maintain. Diary/blog entries will now include the entry title if it exists. At present only syndicated entries have titles. * diary.c (virgule_diary_latest_render): Removed this function. It has been entirely replaced by virgule_diary_entry_render(). * diary.c (virgule_diary_render): Removed duplicate diary rendering code from this function. It now relies on the new function, virgule_diary_entry_render(). * site.c (site_render_person_link): Added virgule_ prefix. * site.c (site_render_recent_changelog): Removed duplicate diary rendering code from this function. It now relies on the new function, virgule_diary_entry_render(). 2006-11-20 R. Steven Rainwater * aggregator.c: Added xmlChar/char casts to fix gcc 4.x warnings. * certs.c: Added xmlChar/char casts to fix gcc 4.x warnings. * rss_export.c (rss_render_from_xml): pubDate is now added to RSS 0.91 feed to make it easier to sort items. The description content is now properly escaped. 2006-11-16 R. Steven Rainwater * util.c (virgule_UTF8ToHtml): This is a local, static copy of the UTF8ToHTML function from libxml2. It has a couple of minor changes that allow it to handle ALL UTF-8 character correctly rather than only UTF-8 characters for which named entity values exist in HTML. Numeric entity values are used if a named entity is not available. * util.c (virgule_nice_utf8): Now relies on our fixed version of the UTF8ToHTML code. * util.c (virgule_nice_htext): Now calls virgule_nice_utf8 to make sure HTML is in the form of ASCII + entity values or numerical character values before processing. This should fix the bug with Chinese (and other) character sets not being saved and rendered correctly. 2006-11-15 R. Steven Rainwater * aggregator.c (aggregator_index_atom_10): Now handles missing link within items correctly. * xml_util.c (virgule_xml_get_string_contents): Bug fix. Now handles CDATA sections correctly. * acct.c (acct_kill): The aggregator feedlist is checked during account deletion and the user's feed is removed if it is present. * aggregator.c (aggregator_index_rss_20): Now checks for the presence of a content:encoded tag and uses that in place of the description tag contents if found. Alternate formats that use dc:date in place of pubDate are also supported. 2006-11-14 R. Steven Rainwater * aggregator.c (aggregator_index_rdf_site_summary_10): RDF Site Summary parsing is now working. Only one variant using a combination of the Dublin Core module for dates and a draft version of the Content module for content encoding has been tested. Other variants are unlikely to work. 2006-11-13 R. Steven Rainwater * aggregator.c (aggregator_index_rss_20): RSS parsing is now working. Most versions should work but older versions will need the optional pubDate tag in order to be parsed correctly. * acct.c (acct_newsub_serve): Increased recent account listings from 50 to 100 for admin reasons. It's helpful to keep a month or so of listings since some spammers wait for while before doing anything interesting. * util.c (virgule_time_t_to_iso): Converts a time_t value to an virgule-style ISO string. If no time_t value is given, the current time is rendered. * util.c (virgule_rfc822_to_time_t): Converts an RFC-822 encoded time to a time_t value. 2006-11-12 R. Steven Rainwater * diary.c (virgule_diary_store_feed_item): Stores an item from a syndicated feed in a user's local blog. Several elements are added to the XML document that are not included when a local diary entry is made, such as the permalink to the original (remote) blog post. 2006-11-11 R. Steven Rainwater * aggregator.c (item_compare): A simple qsort function to compare the timestamps of blog items. * mod_virgule.c (read_site_config): Added computation of the local server's time offset from UTC in seconds. We aren't using this yet but will need it in the near future. 2006-11-10 R. Steven Rainwater * aggregator.c (aggregator_normalize_feed): Takes whatever kind of feed you've got and returns a normalized structure with normalized timestamps, with items sorted by posting time. * aggregator.c (aggregator_index_atom_10, aggregator_index_rss_20, aggregator_index_rdf_site_summary_10): Functions to normalize and index Atom, RSS, and RDF Site Summary feeds. At present we use a small subset of the tags in each, so it seems safe enough to use these for other versions of their kind (e.g. the rss_20 function should work fine on RSS 0.91 feeds, etc.) * xml_util.c (virgule_xml_get_string_contents): Verifies that the passed xmlNode is non-NULL before using it. May have been the source of some segfaults. * util.c (virgule_rfc3339_to_time_t): Converts an RFC-3339 encoded time to a time_t value. 2006-11-09 R. Steven Rainwater * diary.c (diary_edit_serve): Minor correction to error message text. Added missing quotes to attributes in HTML tags. * proj.c (proj_proj_serve): Fixed bug that caused all the projects to vanish. A missing bracket on an if statement was causing all project pages to return a 404. * db_ops.c (virgule_remove_recent): Fixed bug that limited removal of entries from recent files to the initial instance. Now all instances of an entry will be removed. 2006-11-07 R. Steven Rainwater * aggregator.c (aggregator_identify_feed_type): Attempts to identify the format of a blog feed by examining the XML file. Initially it works on most versions of Atom, RSS, and RDF Site Summary formats. 2006-11-05 R. Steven Rainwater * diary.c (virgule_diary_latest_feed_entry): Returns a Unix time_t value reflecting the timestamp of the most recent syndicated diary entry for the specified user. * aggregator.c (aggregator_post_feed): Attempts to identify new blog posts in the user's feed buffer and appends them to the user's blog. 2006-11-03 R. Steven Rainwater * aggregator.c (virgule_aggregator_serve, aggregator_getfeeds_serve): When /aggregator/getfeeds.html is hit, the feedlist will be opened and each listed feed will be retrieved, buffered, and processed. 2006-11-02 R. Steven Rainwater * aggregator.c (virgule_update_aggregator_list): Created this function to check the specified user account and add them to or delete them from the aggregation list depending on their current account settings. 2006-11-01 R. Steven Rainwater * priv.h: Added a user blog syndication level that can be set from the config.xml file. This level will determine what certification is needed for a user to access the blog syndication feature. * mod_virgule.c (read_site_config): Now reads the blogsyndicate feature access level. * req.c (virgule_ok_to_syndicate_blog): New function that returns TRUE if the specified user is certified at a level high enough to use the blog syndication features. Result is based on the current setting specified in the config.xml file. * acct_maint.c (account_index_serve, account_update_serve): Users can now edit and save blog aggregation info to profile.xml. Syndicate status is forced to OFF for users who are not certified at a level allowed to use syndication. 2006-10-31 R. Steven Rainwater * priv.h: Added pointer to tmetric data in the Apache thread private pool. This will allow us to load tmetric data only when it changes and preserve it between hits, instead of loading on each hit. A pointer to a memory sub pool and a time stamp for the tmetric cache was also added. * mod_virgule.c (read_site_config): Make sure the thread private tmetric pointer is set to NULL when the Apache process initializes. The tmetric cache sub pool is destroyed prior to destruction of the main thread private pool when a config file reload occurs. * req.c (virgule_req_get_tmetric): A stat is done on the tmetric cache and it's only reloaded if it has been updated since the last load. Otherwise, a pointer to the copy already loaded in the thread private memory pool is return. If a tmetric reload occurs, the tmetric sub pool is destroyed and a new sub pool allocated. This should prevent memory leaks on reload. * tmetric.c (virgule_tmetric_get): The trust metric cache is now loaded using memory allocated from the tmetric sub pool. * proj.c (proj_proj_serve): The "Project not found" page now returns a 404 instead of a 200. This should discourage repeated visits from search engines to dead project pages. * util.c (virgule_nice_utf8): Added xmlChar casts to eliminate gcc 4.x warning. Replaced strlen with xmlStrlen. * xml_util.c: Added xmlChar/char casts to eliminate gcc 4.x warnings. * acct_maint.c (acct_person_serve): Added a "member since" field to the user profile page. 2006-10-25 R. Steven Rainwater * auth.c (virgule_auth_user_with_cookie): Added xmlChar/char casts to eliminate gcc 4.x warnings. * article.c (article_generic_submit_serve): Added xmlChar/char casts to eliminate gcc 4.x warnings. 2006-10-22 R. Steven Rainwater * acct_maint.c: Fixed numerous xmlChar/char castings to fix gcc 4.x warnings. Switched a few strcmp() calls to xmlStrcmp() both to fix warnings and to make sure the string handling code is UTF-8 safe. 2006-10-19 R. Steven Rainwater * Makefile: Minor compatibility changes for gcc 4.x and Apache 2.2. * mod_virgule (command_rec table): Updated to remove reliance on deprecated Apache 1.3 compatibility layer. Should compile cleanly with Apache 2.2 as well as 2.0 now. * mod_virgule (read_site_config): Added several xmlChar casts of char to eliminate gcc 4.x warnings. Also replaced calls to strcmp with calls to xmlStrcmp. * net_flow.c (virgule_net_flow_max_flow): #Ifdef'd out several debug g_print statements. * eigen.c (virgule_eigen_crank): Added a few xmlChar and char casts to eliminate gcc 4.x warnings. * acct_maint.c (acct_person_serve): When a "person not found" page is returned, the HTTP status code is set to 404 instead of 200. This should help search engines to stop requesting dead pages. * acct_maint.c (acct_person_diary_serve): When diary entries for a non-existent person are requested, the HTTP status code is set to 404 and a "person not found" error page is returned. * tmetric.c (virgule_tmetric_get): Removed some debugging cruft. 2006-10-16 R. Steven Rainwater * acct_maint.c (acct_index_serve): Separated login and password reminder forms to improve usability. * acct_maint.c (acct_person_serve): Spam reporting is now done through a form as per Scott Lamb's suggestion. Helps protect against accidental reports by automated agents following links. This also keeps us compliant with RFC 2616. 2006-10-13 R. Steven Rainwater * rating.c (rating_crank_all): Rewrote this function completely. It now uses the cached, pre-sorted tmetric list instead of looping through and reading every account's XML file. This shaved about 30% off the total processing time. 2006-10-09 R. Steven Rainwater * mod_virgule (read_site_config): Added config handler for new tag to set the spam score at which an untrusted observer account is automatically deleted. * acct_maint.c (acct_flag_as_spam): Handles an account spam report. Writes a new spam flag to the reported account with the name of the flag issuer, and recalculates the spam score. If the score exceeds the currently configured threshold, the account is removed. * acct_maint.c (virgule_acct_person_index_serve): User list paging now handles missing accounts smoothly (most likely missing because they got deleted by the new acct_kill function). * eigen.c (virgule_eigen_cleanup): Remove any eigen data associated with the passed user account. Called as part of the account deletion process. * db_ops.c (virgule_remove_recent): Remove items from a recent list that match a specified user account name. Called as part of the account deletion process. 2006-10-08 R. Steven Rainwater * acct_maint.c (acct_person_serve): Now displays the spam rating for observer accounts. A spam report link is displayed on observer accounts when viewed by trusted users. * req.c (virgule_req_get_tmetric_level): Added additional sanity check to handle case where vr->u is null. This was causing a segfault when a non-trusted user performed certain (very rare) operations. 2006-10-06 R. Steven Rainwater * tmetric.c (tmetric_index_serve): Removed unneeded HTML dump of trust metric debug data during processing. This reduced trust metric computation time by more than 50%. 2006-10-05 R. Steven Rainwater * acct_maint.c (acct_index_serve): Corrected typo in UTF-8 content type specifier for account info form. * acct_maint.c (acct_kill, acct_killsub_serve): Updated account removal code for live use. Account kill feature is now live and can be used by any of the users listed as special users in config.xml. * article.c (article_render_from_xml): Added missing UTF-8 content type specifier in reply form. * article.c (article_reply_submit_serve): Added code to (hopefully) reject duplicate replies. 2006-10-04 R. Steven Rainwater * util.c (virgule_user_is_special): Tests whether or not the currently logged in user, if any, is on the list of special (admin) users. * article.c (article_render_from_xml): Replaced special user code with call to virgule_user_is_special(). * cert.c (virgule_render_cert_level_begin): Replaced special user code with all to virgule_user_is_special(). 2006-10-03 R. Steven Rainwater * acct_maint.c (send_email): For added security the IP address requesting a password reminder is included in the reminder email. * acct_maint.c (acct_person_serve): Observers now have a nofollow relation attribute added to the anchor tag for their homepage. * util.c (virgule_add_nofollow): Adds nofollow relationship attributes to any anchor tags in the passed string. * diary.c (virgule_diary_render, virgule_diary_latest_render): Nofollow is added to anchors in diary entries when rendered for an observer. 2006-10-02 R. Steven Rainwater * article.c (article_render_from_xml): Reply posting form is now concatenated to end of reply list as per Advogato style. * util.c (virgule_nice_utf8): Added new function to clean up some UTF-8 to HTML entity conversions that were being missed. 2006-10-01 R. Steven Rainwater * mod_virgule.c (virgule_read_site_config): Added code support for tag in config.xml that can set the maximum length allowed for article titles. 2006-09-29 R. Steven Rainwater * proj.c: Now has even more horrible hacks scattered through it than before to render three "styles" of project pages: RAPH, NICK, and STEVE. The project style can be set in the config file, so provided you can use one of the three existing options, no code changes will be needed to customize mod_virgule for your use. RAPH style projects match the software projects of Advogato. STEVE style is identical except for one field name change that makes project more generic and matches the use on robots.net. NICK style converts the project area into a sort of makeshift discussion forum. This whole file is a disaster and needs to be re-written to use an external schema or replaced with a general purpose XML object handler. * schema.c: Added virgule_ prefix to non-static functions. * site.c: Added virgule_ prefix to non-static functions. * style.c: Added virgule_ prefix to non-static functions. * tmetric.c: Added virgule_ prefix to non-static functions. * util.c: Added virgule_ prefix to non-static functions. * wiki.c: Added virgule_ prefix to non-static functions. * xml_util.c: Added virgule_ prefix to non-static functions. * xmlrpc.c: Added virgule_ prefix to non-static functions. 2006-09-28 R. Steven Rainwater * mod_virgule.c (virgule_read_site_config): Added code support for three settings to determine the features available at particular certification levels including , , and . * req.c (req_ok_to_post, req_ok_to_reply, req_ok_to_create_project): These functions now return TRUE or FALSE based on the cert levels set in the config.xml file. * article.c (article_render_from_xml): Fix to account for special users in CSS setting of article headers (to match original Advogato functionality). * style.c (render_sitemap): Anchor tags are supressed on the sitemap map link if the target URI matches the URI of the current page. * req.c: Added virgule_ prefix to non-static functions. * rss_export.c: Added virgule_ prefix to non-static functions. 2006-09-23 R. Steven Rainwater * general: Replaced "weblog" with "blog". Robots.net used "weblog" and Advogato used "diary". After discussing with Raph, we decided "blog" was the most recognizable choice. * hashtable.c: Added virgule_ prefix to non-static functions. * net_flow.c: Added virgule_ prefix to non-static functions. * proj.c: Added virgule_ prefix to non-static functions. * rating.c: Added virgule_ prefix to non-static functions. 2006-09-21 R. Steven Rainwater * mod_virgule.c (virgule_read_site_config): Added code support for tag in config.xml. When set to "on", this will allow new account name to use a slightly more premissive set of characters including -,_,., and spaces in their names. When set to "off" it uses the original mod_virgule/Advogato charset. * acct_maint.c (virgule_validate_username): The allowed character set for new user names is determined by a config.xml setting. * eigen.c: Added virgule_ prefix to non-static functions. 2006-09-20 R. Steven Rainwater * mod_virgule.c (set_virgule_db): Stats the provided path to verify that it exists and that it's a directory. Returns error message to Apache if path is invalid. * mod_virgule.c (virgule_read_site_config): Added code support for tag in config.xml. When set to "on", this will turn article titles into links to the article detail page. When set to "off" it uses the original mod_virgule/Advogato style of titles. * article.c (article_render_from_xml): Article title link is now dependent on config.xml setting. Article header white space and width behavior is now set in CSS rather than hardcoded HTML. * style.c (render_header): Isolated a nasty chunk of hardcoded HTML and created a generic version that will be used on all sites except robots.net. This is a particulary nasty hack and will be replaced by something cleaner later. * diary.c: Added virgule_ prefix to non-static functions. 2006-09-18 R. Steven Rainwater * db.c: Added virgule_ prefix to non-static functions. * db_obs.c: Added virgule_ prefix to non-static functions. * db_xml.c: Added virgule_ prefix to non-static functions. 2006-07-07 R. Steven Rainwater * acct_maint.c: Added virgule_ prefix to non-static functions. * apache_util.c: Added virgule_ prefix to non-static functions. * article.c: Added virgule_ prefix to non-static functions. * auth.c: Added virgule_ prefix to non-static functions. * buffer.c: Added virgule_ prefix to non-static functions. * certs.c: Added virgule_ prefix to non-static functions. 2006-06-13 R. Steven Rainwater * util.c (b64enc): Added static to function definition. * util.c (rand_cookie): Renamed virgule_rand_cookie. * util.c (add_topic): Renamed virgule_add_topic. * util.c (match_preifx): Renamed virgule_match_prefix. * diary.c (diary_serve): Renamed virgule_diary_serve. * mod_virgule.c (read_site_config): Renamed virgule_read_site_config. * proj.c (proj_serve): Renamed virgule_proj_serve. * rating.c (rating_serve): Renamed virgule_rating_serve. * rss_export.c (rss_serve): Renamed virgule_rss_serve. 2006-03-14 R. Steven Rainwater * article.c (article_num_serve): Rewrote to use a user editable XML template populated by site_render_page() instead of a hard-coded page. All article non-form pages are now fully user configurable. 2006-02-23 R. Steven Rainwater * article.c (article_num_serve): Removed some debugging cruft * site.c (_RenderCtx): Added variables to hold a tag string and buffer string. This will allow site_render to populate rendered XML templates with contents rendered by other mod_virgule functions. * site.c (site_render_page): Added tag and buffer string args that are passed to site_render via the ctx variable. This function can now be called directly from anywhere in mod_virgule to render a template and optionally populate it with locally rendered content. 2006-02-17 R. Steven Rainwater * mod_virgule.c (register_hooks): Renamed to virgule_register_hooks to comply with Apache module definition standards. * mod_virgule.c (create_virgule_dir_conf): Renamed to virgule_create_dir_config to comply with Apache module definition standards. * mod_virgule.c (read_site_config): Added additional memory allocation safety checks. * acct_maint.c (acct_person_serve): Added last login date to the info displayed on the account page. * db_ops.c (add_recent, db_relation_put_field): Added additional null pointer checks. 2005-08-29 R. Steven Rainwater * site.c (site_render, site_render_cronbox, site_render_recent_bots): Removed the cronbox and recentbot tags and associated render functions as both of these have been replaced by the more general include tag. 2005-08-26 R. Steven Rainwater * mod_virgule.c (read_site_config): Added code to read a new user configurable admin email address tag, adminemail, from the site config.xml * acct_maint (send_email): Replace hard-coded From: address on password reminder email with the configurable admin address. * article.c (article_render_recent): Replace hard-coded story suggestion email address with the configurable admin address. 2005-08-25 R. Steven Rainwater * mod_virgule.c (test_page, read_site_config): Added support for user configurable section of config.xml for article topics. * private.h: Added use_article_topics variable. Added topic array header. Added topics to point to the list of Topic structs. * req.h: Removed old topic array header * util.c (add_topic): New function to add topics as they are read from the config file. * article.c (lots-o-functions): Replaced #ifdefs and hard-coded support for topics with support for user-configurable topic setting. 2005-08-19 R. Steven Rainwater * site.c (site_render, site_render_page): Implemented the head_content tag. Head contents are now passed to the render_header() function where they are inserted into the rendered HTML. 2005-07-27 R. Steven Rainwater * Makefile: Added --strip-debug to linker options to keep filesize reasonable. This is done already on some distros depending on how they build Apache. Explicitly adding the option just makes sure it gets done consistently on all builds. 2005-07-25 R. Steven Rainwater * certs.c (render_cert_level_begin, render_cert_level_end): Removed unneed calls to render_table_open() and render_table_close(). * site.c (render_footer): Removed this redundant function. The function render_footer_send now does it all. * site.c (site_render): Removed unneeded calls to render_table_open() and render_table_close(). * style.c (render_header_raw, render_footer): Removed unneeded STYLE ifdefs and related code used to render old-style tags. * style.c (render_table_open, render_table_close): Removed these unused functions. * style.c (renders_sitemap): Removed unneeded STYLE ifdefs while retaining the enclosed flag for advogato compatiblity. * general: Added a sample data/intermap.txt file to the sample_db directory so that wiki tags will work on new installs. 2005-07-22 R. Steven Rainwater * diary.c (diary_rss_export): Fixed segfault that occured if an RSS XML file was built from an empty diary entry. 2005-07-20 R. Steven Rainwater * Makefile: Added -fno-strict-aliasing flag to get around the type-punned pointer problem in eigen.c that prevents compilation by gcc 3.4.3. 2005-07-10 R. Steven Rainwater * private.h: Created an include for mod_virgule thread private data structures. Moved some elements of the VirguleReq data structure found in req.h to a virgule_private data structure in this file. * (general): Modified the site configuration handling to use a thread private data pool that persists across requests. The site config.xml file is now loaded into virgule_private once for each Apache thread instead of into req once for each request. If the config.xml file is updated, it will be reloaded as needed. * mod_virgule.c (test_page): Now displays status of the new account creation setting of the configuration. The time stamp of the config file in use is also displayed. 2005-07-01 R. Steven Rainwater * (general): Diaries are known as weblogs today by just about everyone and it seems to confuse users to refer to them as anything else. So I'm updating all textual references throughout the code from "diary" to "weblog". For now, I'm leaving "diary" in the underlying code and URL references but that should probably be modernized at some point. 2005-06-22 R. Steven Rainwater * acct_maint.c (acct_person_serve): Fixed a very old HTML coding error - a missing close tag on the #cert fragment identifier. 2005-06-16 R. Steven Rainwater * db.c (db_get_p): A segfault was caused if db_get_p was called with a NULL key. It now handles this condition gracefully by returning a NULL result. This was causing occasional segfaults for trustmetric computations on user profiles that had damaged or incorrect names. * tmetric (tmetric_run): The main loop skips files which return a NULL db_key value. This is usually caused by a damaged or incorrect profile name. Previously, the NULL key value was passed to db_get_p() resulting in a segfault. 2005-06-12 R. Steven Rainwater * (general): Ported mod_virgule to the Apache 2 module API. Changes to includes and code in all *.c files were required. 2005-02-27 R. Steven Rainwater * acct_maint.c (acct_person_serve): Punched up the wording below the certify form to try to cut down on incorrect or inflated certs. 2005-01-29 R. Steven Rainwater * site.c (site_render): Added check for a "start" argument on pages that use tag to allow paging of an external template. * articles.c (article_older_serve): Removed. No longer needed now that article_recent_render() handles paging correctly. Also, note that the site/article/index.xml and site/article/older.xml template are essentially identical now for stock mod_virgule sites. The only difference is that index.xml starts with the most recent articles by default and older.xml starts one page back. This was done because the user may wish to customize the two page to be slightly different in some cases. * style.c (dayofweek): Added a function that returns the day of week so that we can do full RFC 822 dates as needed by RSS 2.0. * style.c (render_date): Added a third date format for full RFC 822 date strings. * rss_export.c (rss_serve, rss_render, rss_render_from_xml): Added RSS 2.0 support to the existing RSS 0.91 code. The URLs are: RSS 0.91 - /rss/articles.xml RSS 2.0 - /rss/articles-2.0.xml 2004-10-22 R. Steven Rainwater * site.c (site_render): Added a tag that will place a pageable list of mod_virgule users on a page. Next/previous page navigation is automatically added and there is a max-per-page value that may be set in the tag to determine how many users are listed on each page. * acct_maint.c (acct_person_index_serve): Complete rewrite of this function to make it much faster, allowing incremental display and paging. Instead of completely parsing the user accounts and sorting them in memory, the userlist is now read from the pre-sorted trust metric table and only those accounts on the currently displayed page are loaded and parsed. * tmetric.c (node_info_compare): Added the user cert level to the comparison. Users are now sorted first by cert level, then by name. 2004-10-10 R. Steven Rainwater * db.c (db_put_p): Reverted Gary's diskspace patch yet again. This time due to what appears to be a rarely encountered race condition that results in the complete loss of the file being written. Yikes! 2004-09-26 R. Steven Rainwater * db.c (db_put_p): Added check for existence of record before rename to prevent errors on posting with Gary's disk space patch. The patch should now working as intended. * post.c, post.h: Remove these two files which are not referenced in the makefile and appear to be unused cruft. 2004-09-17 R. Steven Rainwater * article.c (article_index_serve): Removed this unnecessary function and replaced it with a default XML file that makes the page easily configurable by the user. * site.c (site_render_include): Added a function that allows the user to include one XML file within another. 2004-08-19 R. Steven Rainwater * db.c (db_put_p): Reverted Gary's disk space patch due to problems with posting. 2004-08-19 R. Steven Rainwater * db.c (db_put_p): Added Gary Benson's patch to allow graceful failure in case disk space is exhausted. * rec.h (_VirguleRec): Added nav_options, and pointer to a list of navigation options from which the sitemap can be constructed. * util.c (add_nav_option): Added a utility function to create sitemap navigation option structures. * mod_virgule.c (read_site_config): Added code to read the sitemap navigation options from the XML config file. * style.c (render_sitemap): Sitemap dynamically renders menu from the navigation options specified in the XML config file rather than using hardcoded values. * style.c (render_site_link): Removed this function. It is no longer needed now that relative paths for the sitemap options may be specified directly in the XML config file. 2004-07-09 R. Steven Rainwater * tmetric.c (tmetric_set_name): Fixed segfault that occured if tmetric_find_node() was unable to find a user name. * acct_maint.c (acct_update_serve, acct_person_serve, acct_certify_serve): Added Gary Benson's page refresh patches. 2004-06-23 R. Steven Rainwater * acct_maint.c (acct_index_serve): Added missing vr->prefix to the "edit your existing projects" link, pointed out by Seth Cohn. 2004-04-18 R. Steven Rainwater * (general): Merged changes from latest version of Raph's mod_virgule (which is still going by v1.41) including the new account creation switch, the XML-RPC check cookie method, recentlog permalinks, article permalinks, project permalinks, and recentlog edit links. * acct_maint.c (acct_index_serve, acct_newsub_serve): Added "forgot password" checkbox and instructions to login form. Added forgotten password handler to newsub_serve. * acct_maint.c (send_email): Added send email function to support the "forgot password" feature. This function and the other modifications related to the forgotten password feature are based on a patch by Steve Kemp . The send_email function has a hard-coded path to sendmail and a hard-coded "from:" value that will need to be changed to match the site owners email address. The -f flag is used on sendmail, so you'll want to make apache a trusted user to avoid authentication warnings in the emails. 2003-11-14 R. Steven Rainwater * acct_maint.c (acct_person_index_serve): Corrupt profile.xml files should now be silently skipped rather than segfaulting Apache. 2003-11-02 R. Steven Rainwater * (general): Changed encoding type from ISO-8859-1 to UTF-8 throughout code. This may eliminate some case of browsers submitting forms in the wrong encoding. * tmetric.c (tmetric_run): Added error checking to prevent attempted dereferencing of a null pointer that occured when reading a corrupt profile.xml file. Corrupt files are now silently skipped instead of causing Apache to segfault. 2003-10-19 R. Steven Rainwater * rss_export.c (rss_index_serve): Applied James Henstridge's patch to add missing content type to the returned document. * (general): Applied James Henstridge's patch that ads a link element for auto-discovery of the diary RSS feeds. This changes the number of arguments passed to render_header_raw() and render_header() in style.c and affect all calls to those functions throughout the code. * style.c (render_header_raw): Added link element for favicon. It's hardcoded to be /images/favicon.ico. Probably should make it a configuration option later on. * db_xml.c (db_xml_put): Added xmlIndentTreeOutput flag to make sure libxml2 was indenting and adding newlines to output. This is another compatibility behavior and can be removed in the future if newlines are added to the xml trees. 2003-10-04 R. Steven Rainwater * acct_maint.c (acct_person_diary_???_serve): Replaced xmlDocDumpMemory() with xmlDocDumpFormatMemory() to provide newlines and indenting in output. This simulates the behavior of libxml with respect to whitespace. Ideally these calls should eventually be replaced with nodes that implement the desired newlines and indentation directly. * db_xml.c (db_xml_out): Replaced xmlDocDumpMemory() with xmlDocDumpFormatMemory() to provide newlines and indenting in output. * rss_export.c (rss_index_serve): Replaced xmlDocDumpMemory() with xmlDocDumpFormatMemory() to provide newlines and indenting in output. * xmlrpc.c (xmlrpc_create_response): Replaced xmlDocDumpMemory() with xmlDocDumpFormatMemory() to provide newlines and indenting in output. 2003-10-03 R. Steven Rainwater * db.c (db_is_dir): Removed superfluous strlen() call. 2003-10-01 R. Steven Rainwater * mod_virgule.c (virgule_handler): Added xmlKeepBlanksDefault(0) to force libxml2 to supress blank nodes. This allows the existing mod_virgule XML code to function properly with libxml2 until it can be updated. This can be removed once all xml code is adjusted to handle blank nodes correctly. * (general): Merged changes from latest version of Raph's mod_virgule (which is still going by v1.41) including James Henstridge's diary patches and coderman's XML-RPC patches. * (general): Merged Martijn van Beers libxml2 patch to bring mod_virgule up to the current XML library version. * style.c (render_header_raw, render_footer): Removed code that added redundent copy of page title on every page. 2003-04-21 R. Steven Rainwater * (general): Merged changes from official mod_virgule versions 1.38 through 1.41 2002-09-14 R. Steven Rainwater * style.c (render_sitemap): Added "About" to site menu. This is temporary until a configurable menu is available. 2002-04-29 R. Steven Rainwater * (general): Merged changes from official mod_virgule version 1.36 and 1.37. 2002-04-26 R. Steven Rainwater * (general): Merged changes from official mod_virgule version 1.33, 1.34, and 1.35. 2002-04-06 R. Steven Rainwater * buffer.c/h (buffer_new, buffer_write, buffer_send_response): Modified functions to send ETags. Note that the calling semantics of buffer_send_response have changed. Also generates a Content-MD5 tag, since it costs nothing. * certs.c/h (render_cert_level_text): Added new function to render the certification level as hidden text which shows up in text mode browsers but is hidden in graphic browsers. * acct_maint.c (acct_login): respects new semantics of the modified buffer_send_response function. * article.c (article_render_reply): Added call to the new render_cert_level_text functions. * mod_virgule (virgule_init_handler): Added version number and an init_handler to pass it back to Apache. * req.c (send_response): respects new semantics of the modified buffer_send_response function. * sites.c (site_render_recent_acct, site_render_recent_changelog): Added calls to new render_cert_level_text function. * xmlrpc.c/h, xmlrpc-methods.c/h: Brought all XML-RPC functions up to mod_virgule 1.31 level. 2002-03-26 R. Steven Rainwater * article.c (article_form_serve, article_generic_submit_serve): Changed height of lead box to 6 rows from 4. Added link to a posting guidelines page. 2002-03-24 R. Steven Rainwater * tmetric.c (tmetric_index_serve): Escapes space chars in username before writing the default cert file. This particular bug has been around a long time but only surfaces if there are two users with similar names such as "Joe" and "Joe Smith" in which case, the wrong cert if found. * req.c (req_get_tmetric_level): Escapes space chars in username. 2002-03-22 R. Steven Rainwater * Merged all changes from Raph's mod_virgule through 2.27 except hardcoded directory exception (we already have configurable ones). * xmlrpc-methods.c/h, xmlrpc.c/h: Added Gary Benson's XML-RPC API. * auth.c/h (auth_user): Gary Benson's XML-RPC API. Moved bulk of auth_user() into new function auth_user_with_cookie(). * acct_maint.c (acct_loginsub_serve): Gary Benson's XML-RPC API. Moved bulk of acct_loginsub_serve() into new function acct_login(). * db.c (db_dir_max_in_level): Added Raph's fix for a bug that caused miscounting of numeric directories when the _00.._99 entries follow _a.._d in the readdir() order. * diary.c/h (diary_post_serve): Gary Benson's XML-RPC API. Moved bulk of entry storage code into new function, diary_store_entry(). * mod_virgule.c (virgule_handler): Gary Benson's XML-RPC API. Added handler for xmlrpc stuff. * tmetric.c (tmetric_index_serve): Added Raph's fix to reduced time spent holding global db lock when writing tmetric cache. 2002-03-18 R. Steven Rainwater * acct_maint.c (acct_kill): Added acct_kill() functio to totally remove a user account. The removal procedure will remove all certs to and from the user, remove all diary entries, and remove all the user's project relations. Projects themselves are not removed (even if the user being removed created a project, it may be in use by others) so there is a possibility of orphaned projects. I haven't decided on the best way to deal with this but it's a small price to pay to finally be able to delete user accounts. * cert.c (cert_set): Modified to actually remove certs if they are set to CERT_LEVEL_NONE instead of just rendering them invisible. * db.c (db_del): Added db_del() function to remove database records by key (i.e., it deletes the associated files). This is the missing link that should allow us to eventually add functions that delete user accounts, certs, projects, etc. If removal of the key leaves the directory it was residing in empty, the directory is removed too. * proj.c (proj_set_relation): Added proj_set_relation() function to allow procedural changes to a user's relation to a project. This was previously possible only through the web interface. This function also deletes the relation entirely if it is set to "None" rather than just hiding the stale data as the previous implementation. * proj.c (proj_relsub_serve): Now calls the new proj_set_relation() function rather than directly calling db_relation_put(). 2002-02-17 R. Steven Rainwater * acct_maint.c (acct_person_diary_xml_serve): Added patch from Gary Benson to fix memory leak in XML code. * rss_export.c (rss_index_serve): Added patch from Gary Benson to fix memory leak in XML code. 2002-02-04 R. Steven Rainwater * rss_export.c (rss_index_serve): Adjust URL and increased number of exported articles to 15 from 10. 2002-02-01 R. Steven Rainwater * article.c (article_submit_serve): Added code to authorize user and check for duplicate postings (due to user error or browser problems). 2001-08-11 R. Steven Rainwater * style.c (render_header_raw): Added a hard-coded keyword meta tag for robots.net. 2001-07-18 R. Steven Rainwater * site.c (site_render_banner_ad): Rewrote banner ad code to use the XML database. Banner ads are randomly selected from /ads/adlist.xml and page view counts are decremented with each viewing of the ad. When view count reaches zero, ads are removed from rotation. * site.c (site_send_banner_ad): A wrapper for site_render_banner_ad that allows banner ad requests used as an SSI within an HTML page. * mod_virgule.c (virgule_handler): Added code to handle requests for '/cgi-bin/ad' by calling site_send_banner_ad. 2001-06-15 R. Steven Rainwater * acct_maint.c (acct_touch): New function. Touches a tag in the profile that can be used by an external account reaper to remove unused/unwanted accounts. When I get around to adding an internal account reaper, it will also use this function. * auth.c (auth_user): Added a call to acct_touch(). * article.c (article_form_serve): Removed redundant "Post a new article" text from Posting page. 2001-05-21 R. Steven Rainwater * tmetric.c (tmetric_index_serve): Added changes from Raph's 1.22 version of mod_virgule. Neale Pickett's fix was added to the tmetric cache for names preceding the "-". 2001-04-27 R. Steven Rainwater * site.c (site_render): Added a tag to for the loginbox. * site.c (site_render_loginbox): Added this function to display a login box for users who are not logged in or a welcome message for those who are. 2001-04-23 R. Steven Rainwater * article.c (article_submit_serve): Added maxlength attributes to article submission form to enforce length limits on article titles. * article.c (article_generic_submit_serve): Added maxlength attributes. 2001-04-12 R. Steven Rainwater * article.c (article_recent_render): Added a link for users who can't post that allows them to email story suggestions 2001-04-11 R. Steven Rainwater * style.c (render_header_raw): Added a line of javascript to prevent pages from being displayed inside other sites framesets - this can happen from bad HTML on other websites or intentionally to wrap banner ads around someone elses sites. 2001-04-06 R. Steven Rainwater * mod_virgule.c (xlat_handler): Added a new handler to accept a list of directories in httpd.conf that will be passed through to Apache to be handled normally. * mod_virgule.c (test_page): Added a dump of any VirgulePass values * mod_virgule.c (set_virgule_pass): New function that stores the VirgulePass values in an array. * mod_virgule.c (set_virgule_dir_conf): Added initializer for the new pass_dirs element. * site.c (site_render_recent_bots): Added a function to display recently added robots on the robomenu from an xml file created by the Perl administration program. * site.c (site_render): Added check for the tag. * style.c (render_sitemap): Added link to robomenu and changed the "person" menu to read "humans". 2001-04-03 R. Steven Rainwater * auth.c (auth_user): Tweaked the Apache user name data to remove spaces. This appears to be perfectly legal as far as the common log format and Apache are concerned but webalizer gags on names with spaces for some reason. 2001-03-22 R. Steven Rainwater * article.c (article_form_serve): Removed Post button. User is now required to use the Preview button before posting. Added more descriptive comments about the use of the posting form (hard-coded for robots.net). * article.c (article_generic_submit_serve): Added more descriptive comments about the use of the article preview form (hard-coded for robots.net). 2001-03-16 R. Steven Rainwater * article.c (article_render_topic): Added "alt" attributes to topic icons for HTML compliance. * site.c (site_render): Fixed bug that was putting illegal tags into the XML-generated HTML output. These tags were causing rendering problems on some older browsers. Also fixed a number of case-sensitivities that were screwing up XML->HTML parsing. 2001-03-15 R. Steven Rainwater * article.c (article_render_from_xml): Article titles on lead stories are now links to the story. * util.c (render_date): Added optional date render format which includes hours, minutes, and time zone information. A new arg was added to select the desired render format and render_date() calls throughout mod_virgule were modified to use the new calling style. 2001-03-09 R. Steven Rainwater * rss_export.c (rss_render_from_xml): Added some code to strip HTML anchor tags from the exported story descriptions. Whiles these appear to be legal in RSS, they are annoying. 2001-03-07 R. Steven Rainwtaer * mod_virgule.c (test_serve): #ifdef'd out this function since it seems to not be needed or useful. * proj.c (various): Change hard-coded values used by Advogato into hard-code values for robots.net. These really need to be read from XML rather than hard-code... * site.c (site_serve): If a request for a URI ending in .html cannot be filled by an XML document, an attempt is made to find a static HTML file before declining the request. 2001-03-02 R. Steven Rainwtaer * acct_maint.c (acct_person_serve): Cert selector is not displayed for users when looking at their own page. * article.c (all): Changed calls to ok_to_post() in cases where ok_to_reply() was more appropriate. * article.c (article_form_serve): Changed maximum article title size from 50 to 40 characters. * article.c (article_generic_submit_serve): Changed maximum article title size from 50 to 40 characters. Fixed bug that caused loss of article topic when previewed. * auth.c (auth_user): Authenticated user name from cookie is set in the Apache request_rec->conn_rec->user field so it can be logged. * proj.c (proj_newsub_serve,proj_editsub_serve): Now uses the ok_to_create_project() function instead of ok_to_post(). Reduced project name size from 30 to 25 characters. * req.c/h (ok_to_post): User must have journeyer or higher cert to post an article. * req.c/h (ok_to_relpy): New function. User must have apprentice or higher cert to post a reply to article. * req.c/h (ok_to_create_project): New function. User must have apprentice or higher cert to create a project. * rss.c (rss_index_serve, rss_render_from_xml): Replaced hard-coded references to Advogato with hard-coded references to robots.net. 2001-03-01 R. Steven Rainwater * acct_maint.c (acct_certify_serve): Users are now unable to issue meaningless self-certifications. * site.c (site_render_banner_ad): Kluge to display some random hard-coded banner ads. This will be replaced by real code later. 2001-02-27 R. Steven Rainwater * article.c (article_render_from_xml): Slight fixes to article header code to achieve a uniform header size and preven wrapping in the header. 2001-02-26 R. Steven Rainwater * acct_maint.c (acct_index_serve): Removed hard-coded reference to Advogato.org from descriptive text on user account page. * certs.c (render_cert_level_begin): Removed hard-coded reference to advogato. The code is uneeded as the admin user name and cert level may be set in the httpd.conf file. 2001-02-25 R. Steven Rainwater * mod_virgule (set_virgule_css): Added this function to read the location of the mod_virgule style sheet from the Apache config file. * mod_virgule (create_virgule_dir_conf, test_page, virgule_handler): Added code to support reading the location of the style sheet using set_virgule_css(). * req.h (_VirguleReq): Added pointer to CSS location * site.c (site_render): Removed code that was inserting spurious newlines into HTML rendered from the XML files. This fixes many of the HTML table rendering problems with older Netscape versions. * style.c (render_header_raw): Style sheet location loaded from Apache config rather than a static one is now inserted into raw pages. 2001-02-23 R. Steven Rainwater * util.c, site.c: Merged mod_virgule 1.21 changes. Only additional functionality over my existing changes is the use of as an alternate to . 2001-02-22 Raph Levien * db_ops.c (add_recent): Uses xmlNewTextChild rather than xmlNewChild, so escaping is now correct. * util.c Added tag and renderer. * style.c (render_acceptable_html): Added to list. * site.c (site_render_recent_proj): Changed to use render_proj_name (which escapes the URL correctly) rather than hand-rolled HTML. Thanks to R. Steven Rainwater and Matt McClanahan for patches. 2001-02-22 R. Steven Rainwater * everything : Updated user name support to allow names with spaces, dashes, underscores, and dots. All relevant functions throughout mod_virgule were updated to work with the new name format. 2001-02-21 R. Steven Rainwater * acct_maint.c (all): Modified all function using cert levels to work with the changes made in certs.c (see below). * article.c (article_render_from_xml): Replaced spacer tags with legal HTML alternative. Assorted other HTML fixes. If STYLE is defined in style.h, the article title attributes are taken from the external CSS. * article.c (article_render_from_xml): Rewrote code that renders article headers. A header table is generated that includes a cell for an icon representing the article topic. The styles for the topic and author cells are drawn from CSS. All these change take effect when STYLE is defined. * article.c (article_form_serve): Added topic selector input to the article posting form. * article.c (article_submit_serve): Added support for article topics. * article.c (article_generic_submit_serve): Added support for article topics. * article.h: added ArticleTopic struct. * certs.c/h: Major changes to reconcile an off-by-one error between CERT_NONE (was 0) and the lowest cert level (was 1). The 0th cert level is now considered the default and used in place of both. This simplifies many of the functions, structures, and cert calculations. Replaced the hard-coded cert levels created for Advogato with user configurable ones that may be set in the httpd.conf file. * mod_virgule (command_rec): Added new command records for VirguleCerts, VirguleAdmin, VirguleSeeds, and VirguleTopic. New Apache option handler functions were added for each of these. * mod_virgule (test_page): Now renders seeds, cert levels and admin values that were read from httpd.conf. * mod_virgule (create_virgule_dir_conf): Seed, cert, admin, and topic pointers are now initialized. * mod_virgule (virgule_handler): Pointers to seed, cert, admin, and topic data is now passed to the VirguleReq struct. * req.c (all): Various changes to work with new cert level code. * req.h: Added pointers in _VirguleReq for cert_level array, seed array, topic array, and admin name. * tmetric.c/.h: Various changes to remove hard coded seed values. No changes to trust metric calculation were made. 2001-02-20 R. Steven Rainwater * certs.c (render_cert_level_[begin|end]): If STYLE is defined in style.h, the cert level style is taken from the external CSS rather than hard-coded. * db_ops.c (db_relation_get): Added return value to suppress compiler warnings. Not sure why this function exists? * main_page.c/.h: removed these unused files * mod_virgule.c (virgule_handler): Removed unecessary reference to main_page.c function. Fixed prefix bug that affected the foo.html diagnostics page. Added explanatory comments to some functions. Removed assorted cruft that appeared to have been used by Raph only for initial testing. * proj.c (proj_index_serv): qsort() is now used to alphabetize the project list. An assciated compare function, proj_index_sort() was added. Removed unused variables to eliminate compiler warnings. * site.c (site_render_recent_acct): Replaced spacer tags with table tags for HTML compliance. * site.c (site_render_recent_changelog): Replaced spacer tags with break tags for HTML compliance. * site.c (site_render_recent_proj): Replaced spacer tags with table tags for HTML compliance. * site.c (site_render): Removed some dead code. Added #ifdefs to exclude calls to render_table_[open|close] when CSS extensions are compiled in. * style.c (render_sitemap): If STYLE is defined, sitemap attributes are taken from external CSS rather than hard-coded valueds. * style.c (render_table_[open|close]): Enclosed in #ifdef to exclude these functions when CSS extensions are compiled in. 2001-02-20 R. Steven Rainwater * style.c (render_header_raw): Added support for an external style sheet named /mod_virgule.css to make life easier when customizing a mod_virgule site. 2001-01-24 Raph Levien * auth.c (auth_user): Fixes denial of service attack. Thanks to R. Steven Rainwater for the patch. 2000-11-07 Raph Levien * req.h: * req.c: * tmetric.h: * tmetric.c: Replaced tmetric.xml with plain-text file, which removed a major performance bottleneck. 2000-09-02 Raph Levien * diary.c: Provide separate creation and last update dates. * wiki.c: Liberalize InterWiki lexing. 2000-08-24 Raph Levien * wiki.c (wiki_link): Fix embarassing bugs. * style.c (render_acceptable_html): Add wiki and person tags. 2000-08-24 Raph Levien * util.h: * util.c (nice_htext): Added handlers for special tags (wiki and person). First arg is now a VirguleReq rather than a pool. * acct_maint.c (acct_person_serve): * article.c (article_generic_submit_serve): * diary.c (diary_preview_serve, diary_post_serve): * proj.c (proj_relsub_serve): Changed first arg of nice_htext to vr. * req.h: Added render_data table, used by wiki to store intermap. * wiki.h: * wiki.c: Renders InterWiki links. * Makefile: Added wiki.o. Tue Jun 6 22:47:04 2000 Raph Levien * acct_maint.c: Fixed problem of logging into an account that is an alias. It now follows the alias link. * proj.c (proj_proj_serve): Fixed escaping of project name in cases where it includes "+". * util.c: Added escape_uri_arg() function that escapes query arguments correctly. 2000-04-13 Raph Levien * util.c (nice_htext): Fixed a brown paper bag bug in which nice_htext would run off the end of the buffer. * article.c (article_generic_submit_serve): Fixed a bug in which the nice_text version of the title was ignored. * util.c: Added escape_noniso_char, which translates non-iso characters to reasonable replacements. Both nice_text and nice_htext use this now. This fixes a vulnerability where some browsers (notably Netscape) interpret a tag between 0x8B and 0x9B characters as an HTML tag, and at the same time takes care of the "dreaded question mark" problem when people post from Windows browsers. Sat Apr 8 13:05:38 2000 Raph Levien * proj.c (proj_proj_serve): Properly escape project name in URI. * article.c (article_reply_submit_serve): lead and body are now passed to this routine raw so that they don't accumulate

tags. * util.c: Added "pre" tag to acceptable html. * rss_export.c (rss_index_serve): Changed root element to lowercase "rss". * article.c (article_generic_submit_serve): Check for empty body when submitting a reply. * article.c (article_render_reply): * diary.c (diary_render): Added tags to individual replies and diary entries. Thanks to Kelly for the patch. * diary.c: Fixed segfaulting when diary is empty. Sat Mar 4 16:14:23 2000 Raph Levien * proj.c: * diary.c (diary_post_serve): * acct_maint.c (acct_newsub_serve): Increased add_recent to 50. This makes sense now that the xml tags in site.c actually pay attention to their arguments. * diary.c (validate_key): Patch by R. Steven Rainwater to allow key of -1, which autoassigns a new post number. This makes it easier to use a client for posting diary entries. 2000-03-04 Laurent Gauthier * site.c (site_render_recent_changelog): Implemented this function to render the tag. * site.c (site_render): Added a new tag , that will display the most recent diary entries. * diary.c (diary_latest_render): New function used to render the latest diary update for a given user. * diary.h: Added prototype for diary_latest_render(). Thu Mar 2 17:18:30 2000 Raph Levien * diary.c (diary_serve): Fixed prefix bug. * acct_maint.c (acct_person_serve): Fixed prefix bug. * site.c: Made "recent" tags actually limit the number displayed. Fri Feb 25 13:41:21 2000 Raph Levien * diary.c (diary_render): Fixed a little bug that got introduced with the diary editing code. Fri Feb 25 12:56:14 2000 Raph Levien * acct_maint.c (acct_person_serve): Made an explicit "[Edit]" link for diary editing, rather than just making the date clickable. Made the personal information page automatically redirect through symlinks. Thus, if the account Foo exists and /person/foo/ is requested, it will redirect to /person/Foo/. Wed Feb 23 23:28:12 2000 Phil Schwan * diary.c: Added diary editing. In order to re-use code already present in diary_post_serve and diary_preview_serve, I made them get the diary's index from the form field "key". This key is run through validate_key() which does simple bounds checking and returns a key suitable for passing to db_xml_put. Keys are originally set in diary_index_serve (adding a new diary entry) and diary_edit_serve. Wed Feb 23 15:52:20 2000 Raph Levien * acct_maint.c: When you create an account with uppercase characters, it now creates an "alias" account with the all-lowercase version of the name, pointing to the real account. Conversely, it checks the all-lc name on account creation. This blocks people from creating accounts colliding in name (all except for case) with existing accounts. This was a serious problem because ap_table_* is not case sensitive. * tmetric.c: Changes to work with "alias" profiles. Thu Feb 17 11:46:34 PST 2000 Manish Singh * Makefile: use glib-config and xml-config directly, to avoid gnome build time dependancy * mod_virgule.c: moved gnome-xml #includes to the beginning, so we get xmlNode declared for diary.h 2000-01-17 Raph Levien * diary.c (diary_export): Initial support for exporting diaries as XML files. * diary.h: diary_export declaration. * acct_maint.c (acct_person_diary_xml_serve): Added /person//diary.xml into namespace served. Mon Jan 10 11:11:49 2000 Raph Levien * acct_maint.c: Support for "older entries" for diary. * diary.h, diary.c: Implemented "older entries" link. Implemented a "Preview" button for diary posting. * article.h, article.c: Implemented "older articles" link. Implemented a "Preview" button for article and reply posting. * util.c: Added str_subst utility function, used for previews. Wed Dec 15 14:51:51 1999 Raph Levien * apache_util.c (read_post_data): bytes_read == 0 is an error condition. It was looping infinitely on this. Wed Dec 8 12:24:49 1999 Raph Levien * db_xml.c (db_xml_free): Fixed a really _dumb_ memory leak. Fri Nov 26 16:02:35 1999 Raph Levien * acct_maint.c: Shows project relationships, also have graph display for playing with dot. * article.c: Only display "Reply..." link twice if number of replies != 0. * db_ops.c: Enforce uniqueness when putting new relations in the db. * proj.c: Correct url escaping for project names. Also sanitychecking of new project names. * tmetric.c: Added alan :) 1999-11-15 Raph Levien * db_ops.c (db_relation_put_field): Naming changes. * proj.c: Actually stores the "staff" relationship between project and person now. Mon Nov 15 15:43:47 1999 Raph Levien * proj.c: Project page now works pretty well. * schema.c: Another new thing is a schema system for automating some of the drudge work in having forms with lots of fields. This is used throughout proj.c, and should probably be retrofitted to a few other things. * db_ops.c: I'm starting on support for relations in the database abstraction, which will be useful for multiway relations. For example, if person X works on project Y, it will (with one operation) store information in both /acct/X and /proj/Y. * some other minor fixes too, like alphabetizing the /person/ list and so on.