{
    "content": [
        {
            "type": "text",
            "text": "# proxymap (man)\n\n## NAME\n\nproxymap - Postfix lookup table proxy server\n\n## SYNOPSIS\n\nproxymap [generic Postfix daemon options]\n\n## DESCRIPTION\n\nThe  proxymap(8)  server  provides  read-only  or  read-write table lookup service to Postfix\nprocesses. These services are implemented with distinct service names:  proxymap  and  proxy‐\nwrite, respectively. The purpose of these services is:\n\n## Sections\n\n- **NAME**\n- **SYNOPSIS**\n- **DESCRIPTION**\n- **SERVER PROCESS MANAGEMENT**\n- **SECURITY**\n- **DIAGNOSTICS**\n- **BUGS**\n- **CONFIGURATION PARAMETERS** (12 subsections)\n- **SEE ALSO**\n- **README FILES**\n- **LICENSE**\n- **HISTORY**\n\nUse structuredContent.sections for detailed options, examples, and full documentation.\n"
        }
    ],
    "structuredContent": {
        "command": "proxymap",
        "section": "",
        "mode": "man",
        "summary": "proxymap - Postfix lookup table proxy server",
        "synopsis": "proxymap [generic Postfix daemon options]",
        "tldr_summary": null,
        "tldr_examples": [],
        "tldr_source": null,
        "flags": [],
        "examples": [],
        "see_also": [
            {
                "name": "postconf",
                "section": "5",
                "url": "https://www.chedong.com/phpMan.php/man/postconf/5/json"
            },
            {
                "name": "master",
                "section": "5",
                "url": "https://www.chedong.com/phpMan.php/man/master/5/json"
            }
        ],
        "section_outline": [
            {
                "name": "NAME",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "SYNOPSIS",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "DESCRIPTION",
                "lines": 65,
                "subsections": []
            },
            {
                "name": "SERVER PROCESS MANAGEMENT",
                "lines": 6,
                "subsections": []
            },
            {
                "name": "SECURITY",
                "lines": 20,
                "subsections": []
            },
            {
                "name": "DIAGNOSTICS",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "BUGS",
                "lines": 10,
                "subsections": []
            },
            {
                "name": "CONFIGURATION PARAMETERS",
                "lines": 6,
                "subsections": [
                    {
                        "name": "config_directory (see 'postconf -d' output)",
                        "lines": 2
                    },
                    {
                        "name": "data_directory (see 'postconf -d' output)",
                        "lines": 3
                    },
                    {
                        "name": "daemon_timeout (18000s)",
                        "lines": 3
                    },
                    {
                        "name": "ipc_timeout (3600s)",
                        "lines": 3
                    },
                    {
                        "name": "max_idle (100s)",
                        "lines": 3
                    },
                    {
                        "name": "max_use (100)",
                        "lines": 3
                    },
                    {
                        "name": "process_id (read-only)",
                        "lines": 2
                    },
                    {
                        "name": "process_name (read-only)",
                        "lines": 2
                    },
                    {
                        "name": "proxy_read_maps (see 'postconf -d' output)",
                        "lines": 5
                    },
                    {
                        "name": "data_directory (see 'postconf -d' output)",
                        "lines": 3
                    },
                    {
                        "name": "proxy_write_maps (see 'postconf -d' output)",
                        "lines": 5
                    },
                    {
                        "name": "service_name (read-only)",
                        "lines": 2
                    }
                ]
            },
            {
                "name": "SEE ALSO",
                "lines": 3,
                "subsections": []
            },
            {
                "name": "README FILES",
                "lines": 3,
                "subsections": []
            },
            {
                "name": "LICENSE",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "HISTORY",
                "lines": 14,
                "subsections": []
            }
        ],
        "sections": {
            "NAME": {
                "content": "proxymap - Postfix lookup table proxy server\n",
                "subsections": []
            },
            "SYNOPSIS": {
                "content": "proxymap [generic Postfix daemon options]\n",
                "subsections": []
            },
            "DESCRIPTION": {
                "content": "The  proxymap(8)  server  provides  read-only  or  read-write table lookup service to Postfix\nprocesses. These services are implemented with distinct service names:  proxymap  and  proxy‐\nwrite, respectively. The purpose of these services is:\n\n•      To  overcome  chroot restrictions. For example, a chrooted SMTP server needs access to\nthe system passwd file in order to reject mail for non-existent local  addresses,  but\nit is not practical to maintain a copy of the passwd file in the chroot jail.  The so‐\nlution:\n\nlocalrecipientmaps =\nproxy:unix:passwd.byname $aliasmaps\n\n•      To consolidate the number of open lookup tables by sharing one open table among multi‐\nple processes. For example, making mysql connections from every Postfix daemon process\nresults in \"too many connections\" errors. The solution:\n\nvirtualaliasmaps =\nproxy:mysql:/etc/postfix/virtualalias.cf\n\nThe total number of connections is limited by the number of proxymap server processes.\n\n•      To provide single-updater functionality for lookup tables that do not reliably support\nmultiple writers (i.e. all file-based tables).\n\nThe proxymap(8) server implements the following requests:\n\nopen maptype:mapname flags\nOpen  the  table with type maptype and name mapname, as controlled by flags. The reply\nincludes the maptype dependent flags (to distinguish a fixed string table from a regu‐\nlar expression table).\n\nlookup maptype:mapname flags key\nLook up the data stored under the requested key.  The reply is the request  completion\nstatus  code  and the lookup result value.  The maptype:mapname and flags are the same\nas with the open request.\n\nupdate maptype:mapname flags key value\nUpdate the data stored under the requested key.  The reply is the  request  completion\nstatus code.  The maptype:mapname and flags are the same as with the open request.\n\nTo  implement  single-updater maps, specify a process limit of 1 in the master.cf file\nentry for the proxywrite service.\n\nThis request is supported in Postfix 2.5 and later.\n\ndelete maptype:mapname flags key\nDelete the data stored under the requested key.  The reply is the  request  completion\nstatus code.  The maptype:mapname and flags are the same as with the open request.\n\nThis request is supported in Postfix 2.5 and later.\n\nsequence maptype:mapname flags function\nIterate  over  the  specified  database.  The function is one of DICTSEQFUNFIRST or\nDICTSEQFUNNEXT.  The reply is the request completion status code and a  lookup  key\nand result value, if found.\n\nThis request is supported in Postfix 2.9 and later.\n\nThe  request  completion status is one of OK, RETRY, NOKEY (lookup failed because the key was\nnot found), BAD (malformed request) or DENY (the table is not approved for proxy read or  up‐\ndate access).\n\nThere  is  no  close command, nor are tables implicitly closed when a client disconnects. The\npurpose is to share tables among multiple client processes.\n",
                "subsections": []
            },
            "SERVER PROCESS MANAGEMENT": {
                "content": "proxymap(8) servers run under control by the Postfix master(8) server.  Each server can  han‐\ndle  multiple  simultaneous  connections.  When all servers are busy while a client connects,\nthe master(8) creates a new proxymap(8) server process, provided that the  process  limit  is\nnot  exceeded.   Each  server  terminates  after  serving  at least $maxuse clients or after\n$maxidle seconds of idle time.\n",
                "subsections": []
            },
            "SECURITY": {
                "content": "The proxymap(8) server opens only  tables  that  are  approved  via  the  proxyreadmaps  or\nproxywritemaps  configuration  parameters, does not talk to users, and can run at fixed low\nprivilege, chrooted or not.  However, running the proxymap server  chrooted  severely  limits\nusability, because it can open only chrooted tables.\n\nThe  proxymap(8) server is not a trusted daemon process, and must not be used to look up sen‐\nsitive information such as UNIX user or group IDs, mailbox file/directory names  or  external\ncommands.\n\nIn  Postfix  version 2.2 and later, the proxymap client recognizes requests to access a table\nfor security-sensitive purposes, and opens the table directly. This allows the  same  main.cf\nsetting to be used by sensitive and non-sensitive processes.\n\nPostfix-writable  data  files  should  be stored under a dedicated directory that is writable\nonly by the Postfix mail system, such as the Postfix-owned datadirectory.\n\nIn particular, Postfix-writable files should never  exist  in  root-owned  directories.  That\nwould  open up a particular type of security hole where ownership of a file or directory does\nnot match the provider of its content.\n",
                "subsections": []
            },
            "DIAGNOSTICS": {
                "content": "Problems and transactions are logged to syslogd(8) or postlogd(8).\n",
                "subsections": []
            },
            "BUGS": {
                "content": "The proxymap(8) server provides service to multiple clients, and must therefore not  be  used\nfor tables that have high-latency lookups.\n\nThe  proxymap(8)  read-write service does not explicitly close lookup tables (even if it did,\nthis could not be relied on, because the process may be terminated  between  table  updates).\nThe read-write service should therefore not be used with tables that leave persistent storage\nin an inconsistent state between updates (for example, CDB). Tables that support \"sync on up‐\ndate\"  should  be  safe (for example, Berkeley DB) as should tables that are implemented by a\nreal DBMS.\n",
                "subsections": []
            },
            "CONFIGURATION PARAMETERS": {
                "content": "On busy mail systems a long time may pass before proxymap(8) relevant changes to main.cf  are\npicked up. Use the command \"postfix reload\" to speed up a change.\n\nThe  text below provides only a parameter summary. See postconf(5) for more details including\nexamples.\n",
                "subsections": [
                    {
                        "name": "config_directory (see 'postconf -d' output)",
                        "content": "The default location of the Postfix main.cf and master.cf configuration files.\n"
                    },
                    {
                        "name": "data_directory (see 'postconf -d' output)",
                        "content": "The directory with Postfix-writable data files  (for  example:  caches,  pseudo-random\nnumbers).\n"
                    },
                    {
                        "name": "daemon_timeout (18000s)",
                        "content": "How  much time a Postfix daemon process may take to handle a request before it is ter‐\nminated by a built-in watchdog timer.\n"
                    },
                    {
                        "name": "ipc_timeout (3600s)",
                        "content": "The time limit for sending or receiving information  over  an  internal  communication\nchannel.\n"
                    },
                    {
                        "name": "max_idle (100s)",
                        "content": "The  maximum  amount of time that an idle Postfix daemon process waits for an incoming\nconnection before terminating voluntarily.\n"
                    },
                    {
                        "name": "max_use (100)",
                        "content": "The maximal number of incoming connections that a Postfix daemon process will  service\nbefore terminating voluntarily.\n"
                    },
                    {
                        "name": "process_id (read-only)",
                        "content": "The process ID of a Postfix command or daemon process.\n"
                    },
                    {
                        "name": "process_name (read-only)",
                        "content": "The process name of a Postfix command or daemon process.\n"
                    },
                    {
                        "name": "proxy_read_maps (see 'postconf -d' output)",
                        "content": "The  lookup  tables that the proxymap(8) server is allowed to access for the read-only\nservice.\n\nAvailable in Postfix 2.5 and later:\n"
                    },
                    {
                        "name": "data_directory (see 'postconf -d' output)",
                        "content": "The directory with Postfix-writable data files  (for  example:  caches,  pseudo-random\nnumbers).\n"
                    },
                    {
                        "name": "proxy_write_maps (see 'postconf -d' output)",
                        "content": "The  lookup tables that the proxymap(8) server is allowed to access for the read-write\nservice.\n\nAvailable in Postfix 3.3 and later:\n"
                    },
                    {
                        "name": "service_name (read-only)",
                        "content": "The master.cf service name of a Postfix daemon process.\n"
                    }
                ]
            },
            "SEE ALSO": {
                "content": "postconf(5), configuration parameters\nmaster(5), generic daemon options\n",
                "subsections": []
            },
            "README FILES": {
                "content": "Use \"postconf readmedirectory\" or \"postconf htmldirectory\" to locate this information.\nDATABASEREADME, Postfix lookup table overview\n",
                "subsections": []
            },
            "LICENSE": {
                "content": "The Secure Mailer license must be distributed with this software.\n",
                "subsections": []
            },
            "HISTORY": {
                "content": "The proxymap service was introduced with Postfix 2.0.\n\nAUTHOR(S)\nWietse Venema\nIBM T.J. Watson Research\nP.O. Box 704\nYorktown Heights, NY 10598, USA\n\nWietse Venema\nGoogle, Inc.\n111 8th Avenue\nNew York, NY 10011, USA\n\nPROXYMAP(8postfix)",
                "subsections": []
            }
        }
    }
}